如果用户尚未在该页面上,并且在重定向后必须单击某个按钮,我想将用户 onclick 重定向到某个页面“user/logged_in1”。此按钮打开一个模式。
不适用于此功能:
function redirect_to_logged_in_and_open_modal() {
if(window.location.href.indexOf("logged_in") > -1) {
return
} else {
location.href="user/logged_in1";
document.getElementsByClassName("zimmerbtn")[0].click();
}
}
似乎在重定向发生之前已经搜索了该按钮,因此列表为空。如何解决这个问题?
编辑
这有点复杂。仅当用户使用重定向时才应打开模式。如果我在 body 标记上使用 onload
,则在加载页面时模式将始终打开,我不需要它。我只需要在发生重定向时打开该模式。
整个事情是一个Python Flask应用程序:
{% if current_user.zahlung_iban == None and have_this_user_a_room != None %}
<li><a class="btn mybtn" onclick="redirect_to_logged_in_and_open_modal()" data-toggle="modal" data-target="#premium-special-modal"> Zimmer anbieten </a></li>
{% else %}
<li><a class="btn mybtn" href="{{ url_for('zimmer_einstellen') }}"> Zimmer anbieten </a></li>
{% endif %}
如您所见,该按钮成为重定向按钮有一定的触发器。
编辑
好吧,使用 cookie 听起来是一个可能的解决方案。但我不知道如何在单击按钮后删除 cookie,建议的代码都不起作用,尽管它看起来很简单:
function redirect_to_logged_in_and_open_modal() {
if(window.location.href.indexOf("logged_in") > -1) {
return
} else {
location.href="user/logged_in1";
document.cookie = "redirected_coz_of_click";
}
}
$( document ).ready(function() {
if ($(".logged-in-container")[0]) {
var delete_cookie = function(name) {
document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};
if (document.cookie.indexOf('redirected_coz_of_click') > -1 ) {
document.getElementsByClassName("zimmerbtn")[0].click();
delete_cookie('redirected_coz_of_click');
console.log(document.cookie);
} else {
console.log("cookie removed");
}
}
});
最佳答案
1:在重定向url中追加参数
user/logged_in1?click=btn_id
2:登陆该页面后,您可以检查参数是否存在。找到了这个方法
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
};
在这里找到了方法:https://stackoverflow.com/a/21903119/3514785
所以你可以这样使用它:
var btnToClickId = getUrlParameter("click");
3:使用 jquery(或 javascript,如果需要的话)触发该 btn 上的单击事件:
$("#"+btnToClickId).click();
注意:您想在页面加载后进行检查:
$(window).on("load",function() {
var btnToClickId = getUrlParameter("click")
if(btnToClickId) {
$("#"+btnToClickId).click();
}
});
总结一下
a:编辑您的页面并删除此行 document.getElementsByClassName("zimmerbtn")[0].click();
因为它毫无意义
b:在js中的目标页面中复制并粘贴“getUrlParameter”方法。
c:然后在窗口加载事件监听器内执行 3 中指定的 url 检查。
URL 参数的替代
您可以在重定向之前使用 localStorage 或某些 cookie 来存储目标 ID。确保抓取后记得在目标页面中清除它,这样即使您没有从触发整个过程的页面重定向,它也不会总是被触发。
关于Javascript更改位置href并单击某个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953230/