2012-01-26 14 views
0

.getJSONを使用してJSONオブジェクトを取得し、それらのオブジェクトの内容を使用してテーブルとドロップダウンメニューを作成する2つのajax関数があります。これはうまく動作しています。今、私は、テーブルの最初の列にある各チェックボックスにイベントをアタッチしようとしています。当然、私はこれがAJAX呼び出しが完了した後に起こることを望みます。 JQueryの.when()関数は、両方のAjax関数が完了するまで待つという良い解決策のようです。以下は私のコードです。私は何が間違っていたのか分かりません。なんらかの理由で、.when関数内の警告は発動しません。誰かが間違ったことを指摘できますか?チェックボックス.change()イベントがjQueryの内部で起動しない.when()

答えて

1

あなたのコードにはいくつか欠けているようです。たとえば、$.whenによって返されたオブジェクトへのコールバックを登録していないとします。つまり、Ajax呼び出しが終了するとコードは実行されません。代わりに、$('input:checkbox').click(...)はすぐに実行されます。
$.whenが実行をブロックしている可能性はありますが、そうではありません。 documentationをご覧ください。

さらに、あなたは、イベントハンドラとしてalert戻り値を割り当てているが、あなたは.change機能を渡す必要があります。

私が何をしたいことはあると思う:

$.when(createSpotsTable(), createMarketDropDown(1)).done(function() { 
    $('input:checkbox').change(function() { 
     alert("Hello world!") 
    }); 
}); 

しかし、もしあなたが$.whenを使用する必要はありません、あなただけのイベントの委任を利用することができます:

createSpotsTable(); 
createMarketDropDown(1); 

$(document).on('change','input:checkbox', function() { 
    alert("Hello world!") 
}); 
+0

ありがとうFelix。それは私にとっていくつかのことを明確にしました。しかし、2番目のアプローチでは、Javascriptコンソールに次のような「Uncaught TypeError:Object [オブジェクトオブジェクト]にメソッドがありません」というメッセージが表示されます。 jquery.jsの19行目を参照しています。どのような問題が起こる可能性について考えていますか? – hughesdan

+0

@hughesdan:あなたはおそらくjQueryの最新バージョンを使用していません;)(1.7.1) –

+0

本当に問題でした。ありがとうございました!質問内の質問に答えるには+1。 – hughesdan

0

利用ライブイベント、

jQuery.getJSON('xyz.com',function(){ 
    $('input:checkbox').live('click',function() { 
    // Do you processing. 
    }) 
}); 
+0

ありがとうございます。しかし、ライブイベントは非難されているようです。 http://api.jquery.com/live/ – hughesdan

+0

これを私の通知に持ってくれてありがとう。 ご存知のように、「on」を使用してください。 – Jashwant

+0

なぜコールバック内で 'live'を使用しますか? 'live'の利点は、いつでもイベントハンドラを登録できることです。だから、あなたはAjaxコールを行う前にそれを行うべきです。 –

関連する問題