奇妙な負荷の問題()またはライブ()!
質問
私は()の負荷でページをロードしてから、私はA
このタグdinamically作成します。それから私は、クリックイベントをバインドする)(ライブを使用して機能を発射します。終わりにコールアンロード()。
問題は、上のクリックしたときに、私は(リフレッシュなし)、再び同じページを読み込むときに、関数が二回解雇されるということです。私は(()アンロードして再び)再び終了し、その上の3回とを発射しますクリックでページを再度読み込むと....私のコードのサンプルがあります:
$('#tab').click(function() {
$('#formWrap').load('newPage.php');
});
$('div').after('<p class="ctr" ></p>');
$('p.ctr').live('click', function(e) {
if($(e.target).is('[k=lf]')) { console.log ('one'); delete ($this); }
else if ....
});
function delete () {
$.post( 'update.php', data);
}
私は、このページ上の他の$.post
の内部を有し、また上記のライブFNCともすべての作業に。上記1も動作しますが、私は第二の負荷に言ったように二回発砲し、3回というようになります...
私にとっては奇妙な部分があり、もしrepleceはconsole.logとコンソール(「2」);ページを保存し、それが別の行に発火するリフレッシュせずにページをロードする - 1 2 -
はconsole.log(「3」)でコンソールを置き換えます。そして負荷が再び1 2と3を発射します。 私が使用しよう:
$.ajax({ url: 'updateDB.php', data: data, type: 'POST', cache:false });
$.ajaxSetup ({ cache: false });
header("Cache-Control: no-cache");
このそれの作業のどれも。そして、私はこれだけFNC上でこの問題を抱えています。 あなたは、それが理由かもしれどう思いますか、それは前のアクションを覚えて覚えて、それが再び発火しますか?
解決 2
実際には答えが@vittoreに属します。
私は何が起こっているか少し良く説明してみましょう。
live ()
は、fnは、私はロードしたことをページの中にありました。そして、最初のload ()
でライブfnがクリックするハンドラを割り当てます。しかし、あなたはアンロードを使用して、そのページからクリックし、ハンドラの遺骨との間の接続をすべての要素を削除します。
そして、私は再び(リフレッシュなし)同じページをロードしたとき、live
機能は、古いハンドラを維持し、また再びハンドラをアタッチし、そのたびにload ()
にそれが使用されます。
トリックそれはdie ()
前unload ()
を使用することです。アカウントに取るしかしもう一つます:
live()
($('div').children().live()
は動作しません)とし、またものの連鎖を使用することはできません
$('.div .ctr').live()
動作します。
ちょうど呼び出す$('.ctr').die()
しません仕事ます。
ですから、同じセレクタ$('.ctr').live()
FNの両方に使用する必要があり、その後$('.ctr').die()
多分これは誰かに役立ちます。また、新しい1.4.2 delegate ()
とundelegate ()
をご確認ください。
他のヒント
私は$(この)対あなたは($ this)を持つことにより、タイプミスを持っているかもしれないと思う。
また、あなたは別の関数名をしようとする場合がありますので、JavaScriptでdelete演算子があることに注意してください。
あなたはまた、キャッシュのどこかに罹患しているかもしれません(デフォルトではWebサーバはの.jsファイルのキャッシュを設定する)