Javascript更改位置href并单击某个按钮

Javascript更改位置href并单击某个按钮,javascript,jquery,html,Javascript,Jquery,Html,如果用户不在某个页面上,我想将用户onclick重定向到某个页面“user/logged_in1”,重定向后必须单击某个按钮。此按钮将打开一个模式对话框 不适用于此功能: function redirect_to_logged_in_and_open_modal() { if(window.location.href.indexOf("logged_in") > -1) { return } else { location.href="u

如果用户不在某个页面上,我想将用户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 %}

而不是触发单击。在用户/logged\u的方法的body onload中调用onclick函数

<body onload="openModal()">

您无法访问尚未加载的元素。 通过使用location.href=''您只是将用户定向到一个页面,之后的任何javascript都将失败,因为该页面尚未加载

您告诉我们您想将用户重定向到页面onclick。这听起来像是锚定标记的本质:

对于步骤2,只需将javascript放在重定向到的页面上。绑定到页面的加载事件,然后执行javascript:

window.onload = function() {
    document.getElementsByClassName("zimmerbtn")[0].click();  
};

您正试图访问初始页面上的内容,但您已经从该页面重定向了用户,因此当前方法无法实现此目的

我相信你正在尝试做的是打开一个模式,在重定向之后,执行以下操作

在重定向页面上添加以下内容,使用jquery实现这一点

$( document ).ready(
   // add the functionality to launch modal here
);
你可以用饼干


当用户单击重定向按钮时设置cookie,当页面加载时,检查cookie是否已设置并打开模式。打开模式后,清除cookie。通过这种方式,您可以很容易地实现这一点。

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];
        }
    }
};
3:使用jquery(或者javascript,如果需要)在该btn上触发click事件:

$("#"+btnToClickId).click();
注意:您希望在页面加载后执行检查:

$(window).on("load",function() {
    var btnToClickId = getUrlParameter("click")
    if(btnToClickId) {
        $("#"+btnToClickId).click();
    }
});
总而言之

a:编辑页面并删除此行
文档。GetElementsByCassName(“zimmerbtn”)[0]。单击()因为它毫无意义

b:在js副本的目标页面中,并通过“getUrlParameter”方法

c:然后在窗口加载事件侦听器中,按照3中的规定执行url检查

URL参数的备选方案

您可以在重定向之前使用localStorage或一些cookie来存储目标id。确保抓取后记得在目标页面中清除它,这样即使您没有从触发整个过程的页面重定向,也不会总是触发它。

我为该按钮创建了onclick()函数:

onclick="redirect_to_logged_in_and_open_modal()"
在函数中,我检查我是否尚未登录到站点。如果不是,我将重定向,但我将向URL添加一个附加参数
?重定向

在下一步中,如果加载了已登录的_,并且参数位于URL中,则模式也将打开,即它

感谢@Zuks为URL添加参数的想法

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();
         } 
    } 
});

在将访问者重定向到另一个页面后,如何触发页面中某个元素的单击事件?您的功能正在当前页面上执行。不在您正在重定向用户的页面上。你需要有一个函数(可能在onLoad事件上),当用户登陆你重定向他的页面时,该函数将执行。这听起来像是我需要的。将检查如何实现,您可以在重定向页面的$(document).ready(function())中检查它。
onclick="redirect_to_logged_in_and_open_modal()"
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();
         } 
    } 
});