質問

私は()の負荷でページをロードしてから、私は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ファイルのキャッシュを設定する)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top