在第一个事件完成后执行第二个.click()事件

Execute a second .click() event after the first is done

本文关键字:事件 第二个 click 执行 第一个      更新时间:2023-09-26

我想"链"两个。click()调用,但不能让它工作。当我在浏览器中调试JS代码时,代码确实工作(因此有延迟,似乎可以工作)

我不知何故需要第一个。click()来加载页面(这是第一个事件所做的),只有在完成后,我才希望第二个。click()执行。

我代码:

$.post("settings?type=mail&nr=" + nr, function(data){
    if(data != ""){
        alert(unescape(data));
        // First click event -> realoads the page
        $("#change_settings").click();
        // Second click event -> navigates to a tab
        // inside the page loaded by the first click event
        $("#tab_mail_header" + nr + "").click();
    }
});

编辑:更多代码

function load_change_settings_view(e){
    e.preventDefault();
    $("#content").empty();
    // load settings.jsp in a div (test) inside the mainpage
    $("#content").load("settings.jsp #test", function(){
        // In here are a couple of .click() & .submit() functions but nothing else
    });
});     

$("#change_settings").click(function(e){
    load_change_settings_view(e);
});

编辑:我现在有这个代码:

$("#change_settings").click();
    window.setTimeout(function () {
        $("#tab_mail_header" + nr + "").click();
}, 1000);

我真的不喜欢它,虽然,因为它是一个定时延迟,它可能是情况(在一个缓慢的客户端),1秒的超时将不够。我不想把超时设置得太高,因为这会减慢用户的工作流程与更快的客户端…

我看了几个这样的帖子:

JQuery .done on a click event

等待用户事件

如何等到点击里面的功能?

等待点击事件完成

有没有人知道如何让这个工作?

经过几次尝试,我最终得到了以下解决方案:

代码片段# 1

$.post("settings?type=mail&nr=" + nr, function(data){
    if(data != ""){
        alert(unescape(data));
        // create event object
        var evt = document.createEvent('MouseEvents');
        evt.initEvent('click', true, false);
        // call method manually (not called by actual button click like its supposed to be)
        //   - pass event object
        //   - additional parameter to specify the tab the user is viewing
        load_change_settings_view(evt, "tab_mail_header" + nr);
    }
});

代码片段# 2

function load_change_settings_view(e, p_tab){
    e.preventDefault();
    $("#content").empty();
    // load settings.jsp in a div (test) inside the mainpage
    $("#content").load("settings.jsp #test", function(){
        // Go to previous tab (if one was selected)
        var prev_tab = p_tab;
        if(typeof prev_tab != 'undefined'){
            $("#" + prev_tab).click();
        }
        // In here are a couple of .click() & .submit() functions but nothing else
    });
});  

如果你对如何解决这个问题有更好的想法,或者如果你有任何其他建议,请随时发表评论