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

由于某种原因,该.on()方法不起作用。我有一个向 DOM 添加新值的文本框,上面的代码应该发现那些新的 DOM 元素。我以前遇到过这个问题,但就是想不通它的原因。有什么建议么?还要记住.live()也不起作用。

4

4 回答 4

3

如果要添加到 DOM,则需要使用委托版本。

$(document).on('hover', '.catNameVal', function() {
于 2013-03-12T18:23:55.657 回答
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.

于 2013-03-12T18:27:03.507 回答
1

悬停不是标准事件。你不能检查悬停,它必须是鼠标输入。

于 2013-03-12T18:23:52.753 回答
-3

您需要在创建新元素后调用 .on 以重新绑定事件处理程序。它不会发现新元素。

但这会破坏 .on 将事件委托给处理程序的目的。所以更好的解决方案是在父节点上设置绑定:

$('#catNameValParentNode').on('hover' ...

你明白了。然后它将悬停事件和该处理程序委托给 id 为 catNameValParentNode 的所有子元素

于 2013-03-12T18:23:39.390 回答