如何按顺序执行jquery函数?

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

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

Manning Jquery in Action第2版

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

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

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

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

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

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

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

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

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

 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"); } 

所以,如果我理解你的问题,那么我会像上面那样做。

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

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