如果用户尚未在该页面上,并且在重定向后必须单击某个按钮,我想将用户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烧瓶应用程序:
{% 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");
}
}
});
答案 0 :(得分:2)
1:将参数附加到重定向网址
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上的click事件:
$("#"+btnToClickId).click();
注意:您想在页面加载后进行检查:
$(window).on("load",function() {
var btnToClickId = getUrlParameter("click")
if(btnToClickId) {
$("#"+btnToClickId).click();
}
});
总结
a:修改您的网页并删除此行document.getElementsByClassName("zimmerbtn")[0].click();
,因为它没有意义
b:在js中的目标页面中复制并过去`getUrlParameter&#39;方法
c:然后在on window窗口中加载事件监听器按照3中的指定进行url检查。
替代网址参数
您可以改为在重定向之前使用localStorage或某些cookie来存储目标ID。确保记住在抓取目标页面后将其清除,以便即使您没有从触发整个过程的页面重定向也不会始终触发它。
答案 1 :(得分:1)
您无法访问尚未加载的元素。 通过使用location.href =''您只是将用户引导到一个页面,之后的任何javascript都将失败,因为该页面尚未加载。
您告诉我们您要将用户重定向到页面onclick。这听起来像锚标记的基本要素:
<a href="user/logged_in1">Click Me</a>
对于第2步,只需将javascript放在要重定向到的页面上即可。绑定到页面的加载事件,然后执行您的javascript:
window.onload = function() {
document.getElementsByClassName("zimmerbtn")[0].click();
};
答案 2 :(得分:1)
您可以使用 Cookie 。
当用户点击重定向按钮时设置cookie,当页面加载时,检查cookie是否已设置并打开模态。打开模态后,清除cookie。通过这种方式,您可以轻松实现这一目标。
答案 3 :(得分:0)
而不是触发点击。在 user / logged_in1 的 body onload 方法中调用onclick函数。
<body onload="openModal()">
答案 4 :(得分:0)
您正尝试访问初始页面上的内容,但您已经从该页面重定向了用户,因此当前方法无法实现这一点。
我相信你要做的是打开一个模态,重定向后,执行以下操作。
在重定向的页面上添加以下内容,使用jquery来实现此目的
$( document ).ready(
// add the functionality to launch modal here
);
答案 5 :(得分:0)
我为这个按钮创建了一个onclick()函数:
onclick="redirect_to_logged_in_and_open_modal()"
在函数中,我检查我是否已经在logged_in站点上。如果不是,我会重定向,但我会在网址?redirected
中添加其他参数。
在下一步中,如果加载了logged_in并且参数在URL中,则模态也将打开,就是这样。
感谢@Zuks为Idea添加了一个param。
function redirect_to_logged_in_and_open_modal() {
if(window.location.href.indexOf("logged_in") > -1) {
return
} else {
window.location.assign("https://www.example.com/user/logged_in1?redirected");
}
}
$( document ).ready(function() {
if ($(".logged-in-container")[0]) {
if(window.location.href.indexOf("redirected") > -1) {
document.getElementsByClassName("zimmerbtn")[0].click();
}
}
});