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()ものをバインドします。これにより、事後に DOM への新しい追加が検出されなくなります。あなたがしたいことは、これをユニバーサルな親 DOM 要素にすべての追加要素にバインドすることです。 すべてがその子であるため、通常は安全な選択です。次に、バインディングにフィルターを含めます。'.catNameVal'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

ホバーは標準のイベントではありません。ホバーを確認することはできません。mouseenterである必要があります。

于 2013-03-12T18:23:52.753 に答える
-3

イベントハンドラーを再バインドするには、新しい要素が作成された後に.onを呼び出す必要があります。新しい要素を発見することはありません。

しかし、これは、イベントをハンドラーに委任するという.onの目的を無効にします。したがって、より良い解決策は、親にバインディングを設定することです。

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

あなたはその考えを理解します。次に、ホバーイベントとそのハンドラーをIDcatNameValParentNodeを持つ要素のすべての子に委任します

于 2013-03-12T18:23:39.390 に答える