请查看以下代码。
var $myInput = $('#myInput'); //select the <input> element
$myInput.on('focus', function(){
console.log('Input focused');
})
现在如果我在IE中执行以下两行:
$myInput.trigger('focus');
console.log('Done');
..输出将是:
Done
Input Focused
这是因为,在IE中,触发事件是异步执行的。但在所有其他浏览器中却是另一种方式。有没有解决方法而不是使用triggerHandle()
或手动调用事件处理函数?
答案 0 :(得分:2)
没有。没有办法可靠地保证订单。解决方法是不假冒事件。将在focus
事件中执行的逻辑放在自己的函数中,然后直接调用它。
var $myInput = $('#myInput');
$myInput.on('focus', function() {
foo();
})
foo();
console.log('Done');
function foo() {
console.log('foo');
}
答案 1 :(得分:0)
虽然JS可以被视为脚本的单线程,但浏览器架构以不同的方式处理事物。一个例子是,在某些系统中,window.onresize代码可以在您执行脚本的过程中触发。
Here is是一个答案,可以为此提供一些见解。
因此,当您触发事件时,浏览器会将其放入并行运行的事件队列中(?引用的答案有一些证明)。
接下来会发生什么:
IE速度很慢,以至于在完成当前代码段后执行事件循环。
其他浏览器足够快,可以立即执行循环中的偶数。
然而,所有这些都暗示当你通过代码触发事件时,没有保证可以断定代码的哪一部分将主持另一部分。