当我第一次学习 jQuery 的时候,我通常会附加这样的事件:
$('.my-widget a').click(function() {
$(this).toggleClass('active');
});
在学习了更多关于选择器速度和事件委托的知识之后,我在几个地方读到“ jQuery 事件委托将使您的代码更快”所以我开始写这样的代码:
$('.my-widget').on('click','a',function() {
$(this).toggleClass('active');
});
这也是推荐的方法来复制被否定的行为。现场直播。这对我来说很重要,因为我的很多站点一直在动态添加/删除小部件。上述行为并不完全像。但是 live () ,因为只有元素添加到已经存在的容器’。My-widget’会得到这种行为。如果在代码运行之后动态添加另一个 html 块,那么这些元素将不会得到绑定到它们的事件。像这样:
setTimeout(function() {
$('body').append('<div class="my-widget"><a>Click does nothing</a></div>');
}, 1000);
我现在附上所有这样的事件:
$(document).on('click.my-widget-namespace', '.my-widget a', function() {
$(this).toggleClass('active');
});
这似乎满足了我所有的目标。(是的,在 IE 中,由于某些原因,速度变慢了,不知道为什么?)
它之所以快,是因为只有一个事件绑定到一个单数元素,而辅助选择器仅在事件发生时计算(如果这里有错误,请纠正我)。名称空间非常棒,因为它可以更容易地切换事件侦听器。
因此,我开始认为 jQuery 事件应该始终绑定到 $(document)。 如果你已经读完了整篇文章,谢谢你。我很感谢你的任何/所有的反馈/见解。 假设: 阅读资料/例子:
你有什么理由不想这么做吗?
这能被认为是最佳实践吗? 如果不能,为什么
.on()
//至少1.7版本的 jQuery