我添加单击事件处理程序elment等待click事件完成
$(".elem").click(function(){
$.post("page.php".function(){
//code1
})
})
,并引发点击事件
$(".elem").click();
//code2
我如何确保代码1执行
我添加单击事件处理程序elment等待click事件完成
$(".elem").click(function(){
$.post("page.php".function(){
//code1
})
})
,并引发点击事件
$(".elem").click();
//code2
我如何确保代码1执行
(忽略之后码2执行WebWorkers)JavaScript运行在一个单独的线程上,所以你可以确定code2将总是在code1之后执行。
除非您的代码1做一些事情异步像Ajax调用或setTimeout()
,在这种情况下,触发点击处理程序将完成,然后CODE2会执行,然后(最终)回调从Ajax调用(或setTimeout()
,或什么)将运行。
编辑:为您更新的问题,码2总会代码1之前执行,因为我异步上面所说的Ajax回调将在稍后发生(即使Ajax响应速度非常快,也不会调用回调,直到目前的JS完成)。
“我如何确保代码1执行后码2,执行”
使用.click()
没有params为一个快捷方式到.trigger("click")
,但如果你真的叫.trigger()
明确可以提供额外的参数将被传递给处理程序,它可以让您这样做:
$(".elem").click(function(e, callback) {
$.post("page.php".function(){
//code1
if (typeof callback === "function")
callback();
});
});
$(".elem").trigger("click", function() {
// code 2 here
});
也就是说,在点击处理程序测试是否已在callback
参数中传递函数,如果是,则调用它。这意味着事件发生时“自然”将不会有回调,但是当您以编程方式触发它并传递一个函数时,该函数将被执行。 (请注意,您通过.trigger()
传递的参数不一定是函数,它可以是任何类型的数据,并且您可以传递多个参数,但为此我们需要一个函数。有关更多信息,请参阅.trigger()
doco。 )
我不认为这是真的。它们不会同时执行,但我不相信DOM API会对事件处理程序的调用顺序提供任何保证。即使它们碰巧在一个浏览器的一个版本上以正确的顺序触发,但不能保证在其他情况下会发生什么。 – 2012-08-03 06:17:56
是的,我有一个AJAX调用它[编辑] – 2012-08-03 06:21:26
人们,OP的问题只有一个事件处理程序。 code2只是触发它。 – JJJ 2012-08-03 06:24:14
你可以尝试写这样:
$(".elem").live("click", function(){
//code1
})
而且,正如你的射击触发都会被执行。
裹code2
的方法,并将其添加为内部code1
所以它总是会得到code1
后调用的回调执行
code2 = function(){/*code2*/};
$(".elem").click(function(){
//code1
code2();
})
这不是一个解决方案,我想执行一些其他地方没有code2点击事件 – 2012-08-03 06:29:21
你从来没有提到它应该是可重用的。以上看起来像是一个很好的解决方案。 – 2012-08-03 06:32:46
你从来没有说过任何关于那个所以我假设。我可能会因为不清楚而低估这个问题,但因为你是新人,所以我不打算这么做。 @JonasGeiregat:谢谢。 – Gautam 2012-08-03 06:38:46
使用JavaScript一行行。所以不管出现什么,都会先执行。因此,在其他方法之前添加点击代码将起作用。
此外,如果有任何异步调用,然后采取只有当你得到响应设置的标志。
var clicked = false; $('#elem')。点击(功能(){做一些异步处理 clicked = true; });
而(!点击){//什么都不做}
//其他功能,如果使用POST方法,在物业异步=真正的设置被称为
或第二选择将是。
while(!clicked){}将使浏览器无法响应.. – 2012-08-03 07:42:50
和我认为第二个选项做同样的事情,直到发布请求完成 – 2012-08-03 07:43:19
请定义“代码1执行”的含义。你的代码有一个ajax方法。那么你是说当ajax调用执行或者ajax执行并完成时呢? – Rahatur 2018-03-02 06:26:33