我添加点击事件处理程序到elment
$(".elem").click(function(){ $.post("page.PHP".function(){ //code1 }) })
并触发点击事件
$(".elem").click(); //code2
如何在code1执行后确保code2执行
解决方法
(忽略WebWorkers)JavaScript在单个线程上运行,因此您可以确保code2将始终在code1之后执行.
除非你的代码1执行像Ajax调用或setTimeout()这样的异步操作,否则触发的点击处理程序将会完成,那么代码2将执行,然后(最终)Ajax调用(或setTimeout())的回调,会跑.
编辑:对于您更新的问题,code2将始终在code1之前执行,因为如上所述,异步Ajax回调将在以后发生(即使Ajax响应非常快,它将不会在当前JS完成之前调用回调).
“How i make sure that code2 executes after code1 executes”
使用没有参数的.click()是.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 });
也就是说,在点击处理程序内测试一个函数是否已经在回调参数中传递,如果是,则调用它.这意味着当事件“自然”发生时不会有回调,但是当您以编程方式触发它并传递一个函数时,该函数将被执行. (请注意,您使用.trigger()传递的参数不一定是一个函数,它可以是任何类型的数据,您可以传递多个参数,但是为此,我们需要一个函数,参见.trigger()
doco更多信息.)