2011-12-15 7 views
0

div内でjQuery(ショッピングカート、アイテムの追加/削除)を使用してHTMLを作成および削除しています。このdiv内のリンクの.click()イベントにアクセスする必要がありますが、ページが最初に読み込まれたときにのみ動作します。リンクが削除された後、再追加されてもjQueryイベントに応答しません。リンクがjQueryでアクションを失う

$j(document).ready(function() {}の内部と外部の両方の機能を試しました。再作成後にこのリンク上でイベントを再作成するにはどうすればよいですか?

+0

「リンクが削除された後、再追加されてもjQueryイベントに応答しない」とはどういう意味ですか?あなたのコードを表示 – gdoron

+0

これについて何十もの質問があります。イベントの委譲と 'on'メソッドを調べてください。問題は、バインドした要素が存在しなくなり、新しい要素が代わりに行われるため、古いイベントハンドラがなくなってしまうことです。 – lonesomeday

+0

jsfiddle.netに例を投稿することは可能ですか? –

答えて

2

利用.delegate()代わりの.click()

$(<root-element>).delegate('a', function() {...}); 

アタッチ特定のルート 要素に基づいて、現在または将来、 セレクタと一致するすべての要素の1つ以上のイベントへのハンドラ。

出典:http://api.jquery.com/delegate/

<root-element>document要素とすることができるか、それがその要素を使用するのが最善ですdocument要素の子孫であることは常に存在している要素を知っていれば。

+2

また、1.7では 'on(...、function(){});' –

+0

、 '$()、代理人(、<イベントハンドラ> == '$()。on(、<イベントハンドラ>)' – Jasper

1

使用するjQueryのバージョンに応じて、live/delegate/onを使用してコンテナdivまたはハンドラのコンテンツを上書きするたびに、イベントを再接続する必要があります。

第2の方法は一般的にはよりエレガントですが、欠点があります。特に、コンテナに接続されたカスケードされたデフォルトアクションをキャンセルすることはできません。

1

イベントは、この機能で存在する要素に対してのみ機能します。あなたは、動的に作成されている要素にリスナーを添付するか.live().delegate()を使用を検討する必要があります後(.bind('click')ための短い手である)$(document).ready()

0

.remove()の代わりに.detach()を使用してください。これによりイベントが維持されます。代わりにevent delegationを使用してください。

関連する問題