Frage

ich eine Seite mit load () laden und dann erstelle ich dinamically a

-Tag. Dann benutze ich Live () ein Click-Ereignis zu binden und feuert eine Funktion. Am Ende eines Anrufs unload ().

Das Problem ist, dass, wenn ich wieder die gleiche Seite laden (ohne Refresh), wenn sie auf die Funktion klicken zweimal gebrannt wird. Wenn ich wieder verlassen (wieder mit unload ()) und laden Sie die Seite erneut auf Klick wird 3 mal Feuer und so weiter .... Eine Probe von meinem Code ist:

$('#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);
}

Ich habe andere $.post innen auf dieser Seite und auch auf die oben Live-FNC und alle gut arbeiten. Das vorstehende funktioniert auch, aber, wie ich auf die zweite Last sagte feuert zweimal und die 3-mal und so weiter ... Der seltsame Teil für mich ist, dass, wenn replece die Konsole mit console.log ( ‚zwei‘); Speichern Sie die Seite und laden Sie die Seite ohne Refresh es auf einem anderen Reihen ausgelöst wird - ein zwei -

wenn ich entladen die Seite der Konsole mit console.log ersetzen ( ‚drei‘); und die Last wird wieder feuert eine zwei und drei. Ich versuche zu verwenden:

$.ajax({ url: 'updateDB.php', data: data, type: 'POST', cache:false });

$.ajaxSetup ({ cache: false });

header("Cache-Control: no-cache");

nichts davon, dass es funktioniert. Und ich dieses Problem nur auf dieser FNC. Was denken Sie, es könnte der Grund sein, erinnert es sich die vorherige Aktion erinnert und es feuert wieder?

War es hilfreich?

Lösung 2

in der Tat gehört die Antwort auf @vittore.

Ich werde versuchen, nur ein wenig besser zu erklären, was geschehen war:

war der live () fn innerhalb der Seite, dass ich Laden. Und auf dem ersten load () der Live-fn weist den Handler zu klicken. Aber wenn man Entladen verwenden und dann alle Elemente von dieser Seite die Verbindung zwischen Resten klicken und Handler entfernen.

Und wenn ich Laden wieder die gleiche Seite (ohne Refresh), wird die Funktion live den alten Handler halten und befestigen auch den Handler wieder, und so weiter jedes Mal load () wird es verwendet.

Der Trick ist es die () vor unload () zu verwenden. Aber eine Sache in Betracht zu ziehen: Wir können nicht mit live() verwenden Chaining ($('div').children().live() wird nicht funktionieren), aber auch, obwohl:

$('.div .ctr').live() funktionieren wird.

nur anrufen $('.ctr').die() wird nicht funktionieren.

Sie müssen also für beide fn gleichen Wähler $('.ctr').live() verwenden und dann $('.ctr').die()

Vielleicht wird dies jemand helfen. Und prüfen Sie auch die neue 1.4.2 delegate () und undelegate ()

Andere Tipps

Ich glaube, Sie könnten einen Tippfehler haben, indem er (das $) vs $ (this);
Beachten Sie auch, dass es eine Delete-Operator in JavaScript, so dass Sie einen anderen Funktionsnamen versuchen möchten.
Vielleicht haben Sie auch Leiden von einem Cache irgendwo sein (Web-Server standardmäßig einen Cache für Js-Dateien)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top