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

标签 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 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/

相关文章:

javascript - 如何在 Blogger 帖子下方放置 Whats 应用分享按钮

javascript - JQuery 验证验证下拉列表时的奇怪行为

javascript - Firestore : Query by item in array of document

javascript - 使用 Ramdajs 将命令式样式范式转换为函数式样式范式

javascript - 为什么不能通过连续调用 .text() JQuery 来逃脱?

JQuery如何获取内联样式值

html - 如何获取导航栏后面的图像

javascript - 如何捕获 Backbone.save 的 xhr 对象

javascript - 如何将永久单词添加到文本框?

javascript - 如何在页面重新加载时保持 jquery 脚本更改?