我在这里使用Backbone,但非Backbone网站也遇到了此问题。本质上,我的问题是我在一个javascript文件base.js中定义了许多“全局” jquery函数。然后,我加载新元素,然后使用Backbone,AJAX或您喜欢的任何异步调用将它们附加到页面中。这很好用,除了新对象似乎没有链接到我在pageload上声明的jQuery事件。 (对不起,这里的外行语言-我经常是措辞恰当的新手)例如,假设我在加载到pageload的js文件中声明: $('.element').hover(function(){alert('hi world')});但是,然后我在页面加载之后添加了一个新元素,那么该悬浮将无法正常工作。谁能解释:为什么会这样呢?是否可以强制一个新的附加元素使用/监听已经声明的当前事件?我怀疑(2)不可能(我必须在追加后重写事件),但是很想知道是否有某种解决方案。 最佳答案 为什么会这样呢?因为当执行事件绑定代码时,DOM中不存在的元素将不会受到影响(它们怎么可能呢?它们还不存在!)“常规”事件绑定方法(例如.click()或)会将事件处理函数的副本附加到匹配集中的每个元素。  我可以强制使用新的附加元素来处理/监听已经声明的当前事件吗?实际上,可以通过委派DOM树更高级别的事件处理程序来实现。由于大多数DOM事件都会从其起源的元素冒出来,因此效果很好。使用jQuery,您可以使用.change()(jQuery 1.7+-对于较旧的版本,请使用.on())方法来执行此操作:$("#someCommonAncestor").on("someEvent", ".element", function () { // Do stuff});代码运行时,您调用.delegate()的元素必须存在于DOM中。当事件起泡到足以达到.on()的水平时,jQuery将检查目标元素是否与您传递给#someCommonAncestor的选择器匹配。如果是这样,它将执行事件处理程序。如果没有,事件将继续冒泡到文档的根目录,并且不会触发任何处理程序。
07-24 09:43
查看更多