如果一个元素有多个事件监听器,执行顺序是否基于绑定事件的位置/时间(从上到下在代码中的位置)?是否保证100%的时间?
或者是否存在任何“随机性”?在同一元素上混合使用jQuery和vanilla事件监听器呢?
如果一个元素有多个事件监听器,执行顺序是否基于绑定事件的位置/时间(从上到下在代码中的位置)?是否保证100%的时间?
或者是否存在任何“随机性”?在同一元素上混合使用jQuery和vanilla事件监听器呢?
var el = document.getElementById('clickme');
el.addEventListener('click', function() {
snippet.log('o - 1');
});
el.addEventListener('click', function() {
snippet.log('o - 2');
});
$('#clickme').click(function() {
snippet.log('jq - 1(o -3)')
});
el.addEventListener('click', function() {
snippet.log('o - 4');
});
$('#clickme').click(function() {
snippet.log('jq - 2')
});
$('#clickme').click(function() {
snippet.log('jq - 3')
});
el.addEventListener('click', function() {
snippet.log('o - 5');
});
el.addEventListener('click', function() {
snippet.log('o - 6');
});
$('#clickme').click(function() {
snippet.log('jq - 4')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<button id="clickme">This is for testing</button>
历史上有两种行为模式。
Netscape认为element1上的事件首先发生。这被称为事件捕获。
Microsoft认为element2上的事件优先级更高。这被称为事件冒泡。
现在,您可以通过设置|取消AddEventListener的最后一个参数来决定使用哪个(自上而下或自下而上):
element1.addEventListener('click',doSomething2,true);
element2.addEventListener('click',doSomething,false);
这是一个非常有用的关于EventListeners的讨论。我已经尝试过多次使用示例中的语法...
element.addEventListener("event", callFunction(this.val))
我在将其与单独的函数配合使用时遇到了很多问题。如果可能的话,最好直接将该函数链接到事件。
element.event = function() { /* enter your function contents */ };