2011-09-16 8 views
1
a = new object(); 
a.loadInterface(); 

$("button").click(function() { 
    a.doSomething(); 
}); 

問題はa.loadInterface()はDOMへのボタンをロードするものであり、サーバからのデータはいくつかの属性を移入するために必要とされるので、それは$.post()の終わりに起こるということですボタン。jQueryのクリック機能セレクターを見つけることができません

私はJavaScriptがbutton.clickという検出器を読み込んでいますが、その時点ではバインドするボタンがないと思います。

アイデア?

+1

これは大文字の 'new Object'です。 – pimvdb

+2

'object'は他のライブラリやフレームワークで定義されていると仮定しています。' a.loadInterface() 'が利用できるからです。 – jmar777

+0

@ jmar777:あなたは正しいです、それに気付かなかった。 (しかし、そのライブラリの名前が変わっています... – pimvdb

答えて

3

問題の評価が正しいです。簡単な解決策は、delegateを使用することです。例えば、

$(document).delegate('button', 'click', function() { 
    a.doSomething(); 
}); 


編集: delegate詳細は、それが動的に作成された要素 を上に動作する理由結合イベントはここで見つけることができた後: http://api.jquery.com/delegate/

+0

私の好奇心を許してください。しかし最近、私はこのパターンをよく見ています。なぜ、 'live()'の代わりに '$(document)'に 'delegate()'を呼び出すのが嫌なのですか?間違いなく簡単ですか?私が行方不明の何らかの理由がありますか? –

+2

これは 'live'と非常に似ていますが、' delegate'は実際には単にイベント委譲を設定するために 'button'セレクターを実行しません。 'live'の場合、セレクタ文字列はイベントの委任フィルタリングにのみ必要とされますが、APIは' $( 'some-selector') 'に対してクエリが実行されるよう指示します。実際には、これについて私が賞賛した直接の結果として、「代議者」が中核に上った。背景については、http://bugs.jquery.com/ticket/5877およびhttp://paulirish.com/2010/on-jquery-live/(jQuery.liveは、時間)。 – jmar777

+0

多くのありがとう:) –

0

私はあなたが正しいと思います。投稿から返されたデータに基づいてボタンを作成する場合は、投稿が成功した後に実行されるメソッドでイベントをバインドする必要があります。

関連する問題