0

次のコードがあり、live() メソッドの使用から on() メソッドの使用に変更したいと考えています。

$('.commenttext').live('keydown', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

これは、on() メソッドを使用してオンザフライで作成された投稿にコメントすることです。このように単に「ライブ」という単語だけを「オン」に変更すると

$('.commenttext').on('keydown', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

その場で作成されなかったアイテムでのみ機能します。

更新 1

コードを次のように変更しました。

$('.commentsDiv').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

commentsDiv は commenttext の親要素ですが、その場で作成された要素では機能しません。たとえば、次の関数はその場で commentsDiv を作成します。

$('#postDiv').on('keydown', '#posttext', function(e) {
    if (e.which==13 && !e.shiftKey) {
        post($(this));
        return false;
    }
});

適切に調整する方法を知っている人はいますか?

ありがとう :)

4

4 に答える 4

2

フォームは実際にはliveを使用したデリゲートdocumentであるため、新しい形式は次のようになります。

$(document).on('keydown', '.commenttext', function...);

.commenttext通常は、内容によって変化しないセレクター (この場合は ) のより一貫した親を使用することをお勧めしますがdocument、ほとんどの場合は機能するはずです。

于 2012-05-05T22:23:16.400 に答える
1

最も近い静的親要素をイベント ホルダーとして使用できます。ただし、以下も使用できますbody

$('body').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});
于 2012-05-05T22:22:34.850 に答える
1
$('parentElement').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

.commenttext の親要素を「parentElement」に置き換えます。

于 2012-05-05T22:23:02.917 に答える