4
是否应该将所有jquery事件都绑定到$(document)?
这是哪里来的 当我第一次学习jQuery时,通常会附加如下事件: $('.my-widget a').click(function() { $(this).toggleClass('active'); }); 在学习了更多关于选择器速度和事件委托的知识之后,我在几个地方读到“ jQuery事件委托将使您的代码更快。” 所以我开始写这样的代码: $('.my-widget').on('click','a',function() { $(this).toggleClass('active'); }); 这也是复制不推荐使用的.live()事件的行为的推荐方法。这对我来说很重要,因为我的许多站点始终都在动态添加/删除小部件。上面的行为与.live()并不完全一样,因为只有添加到已经存在的容器'.my-widget'中的元素才能获得该行为。如果在该代码运行后动态添加另一个html块,则这些元素将不会获得绑定到它们的事件。像这样: setTimeout(function() { $('body').append('<div class="my-widget"><a>Click does nothing</a></div>'); }, 1000); 我要实现的目标: .live()的旧行为//表示将事件附加到尚不存在的元素上 .on()的好处 绑定事件的最快性能 管理事件的简单方法 我现在附上所有这样的事件: $(document).on('click.my-widget-namespace', '.my-widget a', function() { $(this).toggleClass('active'); }); 这似乎可以满足我的所有目标。(是的,由于某种原因,它在IE中的运行速度较慢,不知道为什么吗?)之所以快,是因为只有单个事件绑定到单个元素,并且仅在事件发生时才评估辅助选择器(如果此处有误,请更正我)。命名空间很棒,因为它使切换事件监听器更加容易。 我的解决方案/问题 因此,我开始认为jQuery事件应始终绑定到$(document)。 有什么理由为什么您不想这样做? 可以认为这是最佳做法吗?如果没有,为什么? 如果您已阅读了整本书,则谢谢。我感谢任何/所有反馈/见解。 假设: 使用支持.on()//至少1.7版的jQuery 您希望将事件添加到动态添加的内容中 阅读/示例: http://24ways.org/2011/your-jquery-now-with-less-suck http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery http://www.jasonbuckboyer.com/playground/speed/speed.html http://api.jquery.com/on/