$('.catNameVal').on('hover', function() {
notyId = $(this).attr("catnameid");
$(this).append(' <a>Delete</a>');
$(this).unbind('mouseenter mouseleave');
});
由于某种原因,.on()
方法无效。我有一个文本框,它向DOM添加新值,上面的代码应该发现那些新的DOM元素。我以前遇到过这个问题,但却无法找出原因。有什么建议?另请注意.live()
也不起作用。
答案 0 :(得分:3)
如果要添加到DOM,则需要使用委派版本。
$(document).on('hover', '.catNameVal', function() {
答案 1 :(得分:2)
你很亲密,但绑定并不像你想象的那样动态。你在这做什么:
$('.catNameVal').on('hover', function() {
notyId = $(this).attr("catnameid");
$(this).append(' <a>Delete</a>');
$(this).unbind('mouseenter mouseleave');
});
正在使用.on()
绑定到'.catNameVal'
的所有当前已知的匹配,这些事件之后不会发现DOM的新增内容。你想要做的是将它绑定到所有添加的通用父DOM元素。 document
通常是一个安全的选择,因为一切都是孩子的。然后你将在过滤器中包含过滤器:
$(document).on('hover', '.catNameVal', function() {
notyId = $(this).attr("catnameid");
$(this).append(' <a>Delete</a>');
$(this).unbind('mouseenter mouseleave');
});
这样做是将实际事件绑定到document
,但在评估事件时应用'.catNameVal'
的选择器。因此,将评估所有冒泡到document
的匹配事件,针对过滤器进行检查,并在匹配时执行。这会捕获迟到的DOM元素,因为它们仍然会冒出document
。
答案 2 :(得分:1)
悬停不是标准事件。你不能检查悬停,它必须是mouseenter。
答案 3 :(得分:-3)
创建新元素后,您需要调用.on来重新绑定事件处理程序。它没有发现新的元素。
但这会破坏.on的目的,即将事件委托给处理程序。因此,更好的解决方案是在父级上设置绑定:
$('#catNameValParentNode')。on('hover'...
你明白了。然后它会将hover事件和处理程序委托给id为catNameValParentNode的元素的所有子元素