1

別の要素からの別のイベントがトリガーされたときに、イベントを要素にバインドするのに多くの問題があります。私のHTMLはテキストボックスで、テキストが追加されると、サジェレンスのあるコンテキストメニューが作成されます。このメニューは動的に作成されたテーブルであるため、クリック イベントをその要素にバインドしたいと考えています。だから、これは私のコードです:

$("#TextBox").on("keypress", function(e) {
    $("#Menu").find("td").on("click", function(event) {     
        event.stopPropagation();
        event.preventDefault(); 
        processText(event, $(this).children().text()); 
    });
    $(this).off(e);
});

でも、なぜかわからない、うまくいかない。また、変数を作成してフラグとして使用しようとしましたが、どちらも機能しません。

バインドを解除しないと、ユーザーがキーを押した回数だけクリック イベントがトリガーされます。しかし、一度だけ実行されるようにバインドを解除したいのです。

EDIT:エラーは、私が間違ったイベントを処理していたことです。「keypress」ではテーブルがまだ存在しなかったため、「keyup」を処理する必要がありました。

4

2 に答える 2

4

イベントを 1 回だけ発生させたい場合は、$.one() でバインドできます。

http://api.jquery.com/one/

于 2012-07-02T13:03:10.333 に答える
2

すでにon機能を使用しているため。on の代替バージョン (イベント処理の委譲用) を使用して、動的に追加された要素にイベント ハンドラーをバインドします。

on 関数を次のように使用します。

$("#TextBox").on("keypress", function(e) {
    $(this).off("keypress");
});

$("#Menu").on("click", "td", function(event) {     
        event.stopPropagation();
        event.preventDefault(); 
        processText(event, $(this).children().text()); 
});

詳細については、このリンクを確認してください: http://api.jquery.com/on/#direct-and-delegated-events

于 2012-07-02T13:00:36.827 に答える