【问题标题】:Event not working on dynamically created element事件不适用于动态创建的元素
【发布时间】:2012-07-02 13:30:39
【问题描述】:

我正在努力弄清楚为什么 mouseover 事件不能与 .on 处理程序一起使用,该处理程序是从 ajax 动态创建的元素。似乎唯一可行的是带有 .live 的代码,但我知道它已被弃用。

$(".dropdown ul li").live("mouseover", function() {
alert('mouseover works');
});

但是,当我尝试使用 .on 时,它不起作用 - 无论我尝试什么变体(document.ready、.mouseover 等)

$(".dropdown ul li").on("mouseover", function() {
alert('mouseover works');
});

事件处理程序位于代码的底部,因此它们最后执行。有人知道我做错了什么吗?

【问题讨论】:

  • 您显示的.on() 语法 等同于.live().delegate()。 jQuery doco for .live() 告诉你如何转换为使用.on().delegate()

标签: ajax dynamic event-handling jquery


【解决方案1】:

.on 用于具有动态事件委托的新生成元素http://api.jquery.com/on/ - 您的主选择器是一个现有的静态父级

$(".static-parent").on("event1 event2", ".dynamic-child", function() {

或者在你的情况下:

$(".dropdown").on("mouseover", "li", function() {
   alert('mouseover works!!!!!!!!!');
});

委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。例如,此元素可以是模型-视图-控制器设计中视图的容器元素,或者如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。在加载任何其他 HTML 之前,文档元素在文档头部是可用的,因此在此处附加事件是安全的,而无需等待文档准备好。

还要确保使用 DOM 就绪 函数

jQuery(function($) { // DOM is now ready and $ alias secured

    $(".dropdown").on("mouseover", "li", function() {
       alert('mouseover works!!!!!!!!!');
    });

});

【讨论】:

  • alert('不,它没有); :((( 真的希望它会!除了 .live 之外,似乎没有事件处理程序(.click、.on、.delegate)在工作!不知道发生了什么
  • @7ch5 你用的是什么 jQuery 版本?
  • 仍在试图找出我做错了什么。您的答案布置得如此精美,可惜它仍然不起作用! :( 如果有区别,代码用于搜索栏,我在其中输入内容,查询是回显的列表项。每个其他事件处理程序(例如,实际搜索框(keyup,模糊等))除了这个动态创建的元素之外的作品。
  • 这个demo和问题有什么关系?
  • 应该显示带有列表项的 ul - 但我没有意识到我无法通过 jsfiddle 上的另一个站点访问数据,因此它没有按预期显示..(如果您单击该链接,您将看到动态创建的 ul 和列表项。非常感谢您的尝试,但我想我们就睡在上面,看看我们是否能在早上弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多