如何按顺序执行jquery函数?

时间:2012-08-12 07:35:39

标签: javascript jquery jquery-plugins

正如标题所说,我如何维护/控制Jquery中函数的执行顺序?我知道我们可以通过addEventListener建立许多事件处理程序,但是不能保证它们的执行顺序。我来引用

  

请注意,即使处理程序按照它们的顺序触发   成立后,此订单不受标准保证!测试仪   此代码从未观察过订单以外的订单   建立,但编写依赖的代码是愚蠢的   这个命令。始终要注意建立多个处理程序   元素可能会以随机顺序触发。

Manning Jquery in Action第2版

另外,我们可以欺骗 jquery(AFAIK)使用queue()方法按特定顺序执行处理程序,并调用dequeue()方法调用里面的方法该队列,按创建队列时定义的顺序排列。 但这不是一个永久的解决方案,因为虽然dequeue确实以定义的顺序执行它们,但是在执行之后也将它们从队列中删除。所以,这是一次性解决方案,一旦我们完成了队列,顺序(为此我们首先创建了队列!)就不见了。

所以,我想知道,是否有解决方法或解决方案?如果是这样,这取决于我们的要求吗?喜欢处理click事件,或者使用ajax加载异步数据?

3 个答案:

答案 0 :(得分:4)

  

“我知道我们可以通过 addEventListener 建立许多事件处理程序,但不保证执行顺序。”

对于与addEventListener()绑定的事件处理程序,不保证执行顺序,但对于使用jQuery绑定的事件处理程序,的执行顺序 jQuery按照绑定的顺序调用处理程序。

这在jQuery文档中的大胆粗体文本中并没有显而易见,但如果你看起来足够努力,那么就是。来自.on() method doco

  

(绑定到元素的事件处理程序的调用顺序与它们绑定的顺序相同。)

或者来自.bind() method

的更详细信息
  

当事件到达元素时,将触发绑定到该元素的该事件类型的所有处理程序。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。执行完所有处理程序后,事件将沿着正常的事件传播路径继续。

答案 1 :(得分:0)

我可以使用回调函数并处理这些函数中的事件。

function helloWorld(hello,callback)
{
   //does something here with hello 
   callback(); //calls the callback function for final execution
}

helloWorld("world",alertUser);

function alertUser(){
  alert("I am done with this function");
}

所以,如果我理解你的问题,那么我会做类似上面的事情。

答案 2 :(得分:0)

如果您需要以特定顺序执行代码,为什么要使用多个事件处理程序?

如果您使用一个以所需顺序执行多个函数调用的事件处理程序,它通常会导致更易于维护和显而易见的代码。