0

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

请注意,即使处理程序按照它们建立的顺序触发,标准也不保证此顺序!此代码的测试人员从未观察到除了建立顺序之外的其他顺序,但编写依赖于此顺序的代码将是愚蠢的。请始终注意,在一个元素上建立的多个处理程序可能会以随机顺序触发。

Manning Jquery in Action 第 2 版

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

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

4

3 回答 3

4

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

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

这在 jQuery 文档中的大粗体文本中并不是很明显,但如果你足够努力的话,它就在那里。.on()方法 doco

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

或者更详细地从.bind()方法

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

于 2012-08-12T07:44:10.073 回答
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");
}

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

于 2012-08-12T07:39:36.220 回答
0

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

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

于 2012-08-12T07:56:57.503 回答