并发 – jquery处理程序是否保留队列?
我有这个简单的代码 :
Link1 Link2 $('#link1').click(function () { alert("First"); }); $('#link2').click(function () { alert("Second"); });
用户点击Link1(第一个)而不是Link2的“远程”可能性,相差0,000000001 ms(我知道,这在现实中是不可能的,但只是要知道),是否有可能#link2的警报在#link1的警报之前启动?
如果是的话,阻止#link2处理程序的解决方案是什么,直到#link1的操作没有完成?
“……
#link2
的警报是否可能在#link1
的警报之前启动?”
不可以。如果点击实际按该顺序发生,则将按该顺序触发事件。
JavaScript是单线程的,事件系统是同步的 。 这保证了在允许第二次单击事件之前必须完成第一次单击的同步部分。
如果第一次单击时将异步代码引入处理程序,则第一次单击仍将首先开始,但如果在第一次单击的异步代码运行之前发生第二次单击,则可以启动第二次单击。
要模拟超快的点击序列,只需让代码触发事件即可。
var l1 = $('#link1'); var l2 = $('#link2'); l1.click(); // this alert will always come first l2.click();