2011-12-27 6 views
0

私はフォームにajaxedがあり、そのフォームの中に新しい入力が生成され、これらの新しい入力には最初のajaxedフォームの.live()によってイベントが付加されています。私は1つのだけのライブイベントを持っている必要があり、個々の要素にバインドされた2つのライブイベントを持っている:私はこのajaxedフォームを閉じてから、更新せずに、再びそれを開いたときにjQueryの代わりに.die()。ajaxedコンテンツのlive()?

だから、私がいる問題が発生します。

私はこれを回避する方法は、の前にそれぞれ.die()をつけて、以前に添付されていたすべてをクリアすることですlive()

これを扱うのクリーナー、またはより適切な方法がある場合、私は疑問に思って?

答えて

4

あなたが認識しているか.live()作品、右?あなたはそれが一度呼び出して、イベントハンドラは、文書に添付し、そのセレクタに一致するすべての要素のイベントを処理し、彼らは将来に追加している場合でも。要素を追加するたびに.live()に電話をかけることはありません。正しく使用している場合は、その特定のイベントの処理を完全に停止したい場合、またはハンドラを変更/置き換えたい場合は、.die()に電話する必要があります。

ショートバージョン:クリーナー、より適切な選択肢は、あなたがする必要がない場合.live()を呼び出して終了することです。

+0

は、私は、このフォームを設定している方法は、それはスクリプトそれがロードされるたびにロードするということです、あなたは非常に理解してないと思う、それは私が働いているMVCは、セットアップでどれだけです。したがって、フォームが読み込まれるたびに、スクリプトが読み込まれます。フォームを閉じてから、再度開いてスクリプトを再読み込みします。 –

+0

したがって、ライブイベントはフォーム内の最初のフォームの読み込み後に新しく作成された要素にアタッチされているため、クリックイベントでは不十分です。 –

+0

これでフォームが正しく設定されていません。 '.live()'は* once *と呼ばれるべきです。フォームがロードされるたびにイベントを添付したい場合は、定期的なイベントを使用し、適切なタイミングでアタッチしてください。何か変わったシナリオについて話しているのでなければ...コードを提供する必要がある場合は、あなたがするべきではないことをしている可能性があります。 – cHao

関連する問題