2

让我的.on()工作遇到一些问题。我的网站在这里

如果您查看 www.eliteweb-creation.co.uk/dev/js/nav.js,我正在设置一些 on mouseenter&mouseleave事件处理程序$('a.left.active')

为了将来有人查看这篇文章,我已将代码添加到 jsfiddle:

http://jsfiddle.net/TcbAP/

锚点.active在单击时会动态添加到它们,因此使用.on()而不是.click()让 jQuery 检测到 dom 更改并添加事件处理程序。

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

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

4

2 回答 2

4

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

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

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

您可以在jQuery 文档中阅读更多相关信息:直接和委托事件

于 2012-07-18T23:17:42.083 回答
0

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

来自 jQuery API:

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

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

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

编辑:代码清理

于 2012-07-18T23:22:33.127 回答