jQuery .on()似乎不起作用

时间:2013-03-12 18:21:20

标签: javascript jquery

        $('.catNameVal').on('hover', function() {
            notyId = $(this).attr("catnameid");
            $(this).append(' <a>Delete</a>');
            $(this).unbind('mouseenter mouseleave');
        });

由于某种原因,.on()方法无效。我有一个文本框,它向DOM添加新值,上面的代码应该发现那些新的DOM元素。我以前遇到过这个问题,但却无法找出原因。有什么建议?另请注意.live()也不起作用。

4 个答案:

答案 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的元素的所有子元素