是两个相等的jQuery.on事件绑定了两次
Are two equal jQuery .on events binded twice?
假设我们有很多事情要做。我们使用$('body').on('click', '.todo', do_stuff)
而不是$('.todo').click(do_stuff)
,因此我们只将一个事件侦听器附加到DOM。
然而,我使用的是一个小型MVC。每个待办事项视图都有此代码$('body').on('click', '.todo', do_stuff)
。所以,如果我们有20个待办事项,这意味着身体上有20个听众,还是只有一个?他们都会开火吗?
您应该终止上一个事件处理程序:
<script>
$('body').off('click','.todo', do_stuff);
$('body').on('click', '.todo', do_stuff);
</script>
在off()
函数中包含实际的事件处理程序函数,只会删除该特定的处理程序,而不会删除由相同元素/事件触发的所有其他处理程序。此外,在执行此操作时,请避免使用匿名函数。
目前还建议放弃unbind()
和kill()
。on() / off()
应适合您的所有事件处理需求,包括未来的实时绑定和延迟结果。
如果您执行该代码20次,最终将绑定20个事件处理程序;是的,他们都会开火。
这意味着body
有一个监听器,它检查所有点击事件,并检查事件目标的DOM结构,看看它是否包含.todo
元素。
无论你有多少.todo
元素,身体上永远只有一个监听器。
示例(粗略代码、忽略就绪处理程序等):
<script>
$('body').on('click', '.todo', myFunc);
// results in 1 handler on the Body, which will be called when each .todo element is clicked
</script>
<body>
<div class="todo">Foo</div>
<div class="todo">Bar</div>
<div class="todo">Baz</div>
</body>
相关文章:
- 在offline.js中绑定事件
- 如何在angularjs中检查Kendo树视图数据绑定事件
- 在页面高度更改时绑定事件
- 在页面重新加载后绑定事件,并仅使用Knockout.js、html和js创建新的html元素
- 使用onbeforeunload绑定事件
- 传递类似绑定事件的参数
- 如何对修改后的元素重新绑定事件
- 聚合物模板自动绑定:在模板绑定事件之前的核心选择火灾
- Jquery差异B/w Jquery绑定事件
- SessionStorage绑定事件
- extjs,如何在表单操作中绑定事件
- 模拟 Web 浏览器方向更改事件以使用 Jasmine 测试绑定事件处理程序函数
- 绑定事件发射器上的单个事件
- 如何在绑定事件期间排除元素
- 将鼠标悬停在位于我的页面上的 iframe 上的绑定事件,其中包含包含的 src
- 在 jQuery 中创建 DOM 之前的绑定事件
- 如何在页面加载时在 ajax 调用中绑定事件处理程序后触发事件
- 使用 ajax 加载的页面绑定和取消绑定事件处理程序
- 咖啡脚本构造函数中的绑定事件
- 将数据添加到动态创建的元素和绑定事件