0

重複の可能性:
jQueryで動的に作成された要素をバインドする

次のコードを変更する方法はありますか?

$('#city')
        .focus(function () {
            $('option[value="99"]', this).remove();
            store.setItem($(this).attr('id'), $(this).val());
        })
        .change(function () {
            store.setItem($(this).attr('id'), $(this).val());
            $(this).attr("title", $("option:selected", this).attr("title"));
            $('#detailData').html("");
        });

クラス「update-title」がある限り、まだ作成されていない場合でも、selectに対して機能するようにします。例えば:

<select class="update-title"> 

ライブを使用した実装を見ましたが、誰かが使用するのは良くないと言いました。また、これを行うには多くのオーバーヘッドがあります。document.ready()を使用してselectが作成されたことを確認した後で、コードを追加する方がよいでしょうか。

4

4 に答える 4

6

をご覧くださいonliveこれはあなたのためにこれを行う代替品です。

于 2012-08-30T13:38:17.627 に答える
1

委任を使用するのが最善の方法です。つまり、domのロード時に存在する親要素にイベントハンドラーをバインドします。次に、指定された要素のイベントをリッスンして処理します。

ex with jQuery 1.7+

$('body').on('click','.update-title', function(){ // <-- all click events will now bubble
// up to body - and it will listen for events from .update-title
    // code here
});

本文/ドキュメントへのバインドのオーバーヘッドを確認できるため、domロードでイベントハンドラーを最も近い親にバインドすることをお勧めします-すべてのクリックイベントがバブルします-親要素にバインドする場合、その要素内のイベントのみ泡立ちます。

于 2012-08-30T13:46:36.900 に答える
1

あなたが必要ですon

$(document).on('change', '.update-title', function(event){

    // your business here

});

このようにして、要素がドキュメントのロード時に存在したかどうかに関係なく、要素でdocumentトリガーされたイベントをリッスンします。.update-title

于 2012-08-30T13:40:55.170 に答える
0

はい、htmlがajaxにロードされていない場合は、selectがdocument.ready()で作成されていることを確認してください。

于 2012-08-30T13:39:46.180 に答える