我正在拔头发,试图弄清楚为什么鼠标悬停事件不适用于具有 ajax 动态创建元素的 .on 处理程序。似乎唯一有效的是带有 .live 的代码,但我知道它已被弃用。
$(".dropdown ul li").live("mouseover", function() {
alert('mouseover works');
});
但是,当我尝试使用 .on 时,它不起作用 - 无论我尝试什么变体(document.ready、.mouseover 等)
$(".dropdown ul li").on("mouseover", function() {
alert('mouseover works');
});
事件处理程序位于代码的底部,因此它们最后执行。有人知道我做错了什么吗??
对具有动态事件委派的新生成的元素使用 .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!!!!!!!!!');
});
});