1

.live() は廃止されたので、.on() を使い始めました。

次のコードがあります。

$('.myClass').on("click", function(event)
{
    var args = '......';

     SendAjax(args);
});

SendAjax 関数はこれを行います。

SendAjax(args)
{
    $.ajax(
    {
        type: "POST",
        url: webPageName,
        data: queryParams+'&'+unique,
        success: function(result)
        {
            MyReturnFunction(result);
        }
    });
}

ajax は次の関数に戻ります。

MyReturnFunction(response)
{
      $('.myClass').html(response);
}

しかし、この MyReturnFunction() の後、.myClass のイベントは機能しなくなります。.on() または .bind() でこれを修正するにはどうすればよいですか?

4

1 に答える 1

2

.on()関数は追加の引数を取ることができます:

$('body').on('click', '.myClass', function() { ... });

それはあなたのために何.live()をしたかですが、それは逆向きの API 設計でした。ここで、委任されたハンドラーを配置する場所を決定する必要があります。body 要素はデフォルトとして適切ですが、任意の親にすることができます。テーブル内のクリックを処理しているときに、<table>要素でバインディングを行うと便利な場合があります (ただし、本体も問題なく動作します)。

したがって、基本的なルールは、以前は次のように書いていたときです。

$('something').live('event-name', function() { ... })

あなたが書く:

$('container-selector').on('event-name', 'something', function() { ... })

「コンテナー セレクター」は、実際のイベント ハンドラーを配置する場所を指定します。これは、バブル イベントのターゲットが指定された「何か」セレクターと一致するかどうかを確認するものです。以前と同様に、1 つだけではなく、イベント名のリスト (スペースで区切られたもの) を渡すことができます。イベント名を関数にマッピングするオブジェクトを渡すことができるバリアントもあります。

于 2013-01-21T06:04:39.517 に答える