.on()没有检测到dom变化

时间:2012-07-18 23:10:30

标签: dom jquery

.on()工作时遇到一些问题。我的网站是here

如果您查看www.eliteweb-creation.co.uk/dev/js/nav.js,我正在mouseenter& mouseleave

上的$('a.left.active')个事件处理程序

为了将来查看此帖子的任何人,我已将代码添加到jsfiddle:

http://jsfiddle.net/TcbAP/

锚点在点击时动态添加.active,因此使用.on()代替.click(),以便jQuery检测到dom更改并添加事件处理程序。

在添加.on("click")类之前我的.active锚定工作正常,问题似乎是.on()未检测到类更改。

感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:4)

使用.on()并不能让你的代码检测到变化。

您必须从不更改的祖先元素委派click事件处理程序:

$('.nav').on('click', 'a.active', function(e) {
    // Put your code here...        
});

您可以在jQuery docs: Direct and delegated events

中详细了解相关信息

答案 1 :(得分:0)

.on只会在运行时附加符合标准的元素,这就是为什么他们建议将这些定义放在document.ready中。

来自jQuery API:

事件处理程序仅绑定到当前选定的元素;在您的代码调用.on()

时,它们必须存在于页面上

除非再次运行.on定义,否则不会重新评估新修改的元素。您可以更广泛地定义并根据需要检查其他类:

$('a.left').on("click", function(event){
  if($(this).hasClass('active')) {
    // Do fancy stuff here
  }
});

编辑:代码清理