2012-07-18 84 views
1

有一些问题让我的.on()工作。我的网站是here.on()没有检测到dom变化

如果你看一看www.eliteweb-creation.co.uk/dev/js/nav.js,我就$('a.left.active')

设置了一些关于mouseenter & mouseleave事件处理程序对于任何人的缘故在未来的浏览这个帖子,我已经添加了代码的jsfiddle:

http://jsfiddle.net/TcbAP/

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

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

任何和所有的帮助表示赞赏。

+2

你应该张贴在这里你的代码。 StackOverflow不是一个调试服务。我们在这里帮助您解决*特定的问题,并让这些问答有助于他人的未来。你能否提供[SSCCE](http://sscce.org/)? – 2012-07-18 23:12:33

回答

4

使用.on()不会奇迹般地让您的代码检测到更改。

你必须委派从祖先元素的单击事件处理程序,不会改变:

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

您可以在jQuery docs: Direct and delegated events

+0

太棒了,这个作品完美!请参阅此处更新的示例: http://jsfiddle.net/TcbAP/1/ – user1536305 2012-07-19 08:43:59

0

.on将只重视要素阅读更多关于它是在运行时符合标准,这就是为什么他们建议将这样的定义放入document.ready

从jQuery的API:

的事件处理程序仅结合到当前选择的元素;它们必须在您的代码调用时存在于页面上.on()

除非再次运行.on定义,否则它不会重新评估新修改的元素。你可以在你的定义更宽泛,检查其他类,如果你想:

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

编辑:代码清理