我想"链"两个.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秒超时是不够的。我不想将超时设置得太高,因为这会降低具有更快客户端的用户的工作流程...
我看了几张这样的帖子:
How to wait till click inside function?
Wait for click event to complete
有没有人知道如何让它发挥作用?
答案 0 :(得分:1)
代码段#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
});
});
如果您对如何解决此问题有更好的了解或者您有任何其他建议,请随时发表评论