2

ソート可能なリストの入力要素とテキストエリア要素にフォーカスを設定する必要があります。
これが私のコードです(1)。

a)リストをロードすると、入力ごとにリスナーが追加されるため、正常に機能します。
b) リストに新しい要素を追加すると、リスナーが複製されます。

これをどのように回避する必要がありますか?
イベント委譲を使用して body で単一のリスナーを使用しようとしている可能性がありますか? 何か案は?
ありがとう

(1)

setTimeout(function () {
    var setFocus = function () {
        $('.ui-sortable').find('input, textarea').click(function () {
            $(this).focus();
        });
    };
    $('.ui-sortable').on('DOMNodeInserted', setFocus);
    setFocus();
}, 0);
4

4 に答える 4

2

これはうまくいくはずです:

$('body').on('.ui-sortable input, .ui-sortable textarea', 'click', function () {
    $(this).focus();
});
于 2012-10-05T17:18:43.697 に答える
0

削除して再度追加できます

$('.ui-sortable').off('DOMNodeInserted').on('DOMNodeInserted', setFocus);

このように追加してみることができます

$(document).on('DOMNodeInserted', '.ui-sortable', setFocus);
于 2012-10-05T17:09:44.880 に答える
0

リスナーを 1 回だけ追加するようにコードを変更するか、最初に古いリスナーを削除する必要があります。

$('.ui-sortable').off('DOMNodeInserted').on('DOMNodeInserted', setFocus);

削除したくない他のリスナーがある場合は、リスナーを追加するときに名前空間機能を使用して、関心のあるリスナーのみを削除できます。

$('.ui-sortable').off('DOMNodeInserted.setFocus').on('DOMNodeInserted.setFocus', setFocus);
于 2012-10-05T17:13:50.610 に答える
-1

イベントを委任してみてください..新しい要素を作成するたびにイベントを割り当てる必要がないように

$(document).on('DOMNodeInserted', '.ui-sortable', setFocus);
于 2012-10-05T17:13:30.733 に答える