Javascript更改位置href,然后点击某个按钮

时间:2017-01-31 08:52:00

标签: 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="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");
        }
    } 
});

6 个答案:

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