Question

Je charge une page avec une charge (), puis-je créer une balise dinamically

. Puis-je utiliser en direct () pour lier un événement de clic et les feux d'une fonction. A la fin d'un déchargement d'appel ().

Le problème est que lorsque je charge la même page (sans actualisation) lorsque le cliquez sur la fonction sera tiré deux fois. Si je à nouveau sortie (à nouveau avec unload ()) et charger la page à nouveau clic feu 3 fois et ainsi de suite .... Un échantillon de mon code est:

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

J'ai d'autres à l'intérieur $.post sur cette page et sur fnc vivre au-dessus et tout fonctionne bien. Celui ci-dessus fonctionne aussi, mais comme je l'ai dit sur la deuxième charge sera deux fois le feu et les 3 fois et ainsi de suite ... La partie bizarre pour moi est que si replece la console avec console.log ( « deux »); enregistrer la page et chargez la page sans le rafraîchir se déclenche sur une des lignes différentes - un deux -

si je décharge la page remplacer la console avec console.log ( 'trois'); et la charge à nouveau se déclenche un deux et trois. J'essaie d'utiliser:

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

$.ajaxSetup ({ cache: false });

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

pas de travail de ce qu'elle. Et j'ai ce problème que sur ce fnc. Que pensez-vous, ce pourrait être la raison, il se souvient qu'il se souvient de l'action précédente et il se déclenche à nouveau?

Était-ce utile?

La solution 2

En fait, la réponse appartient à @vittore.

Je vais essayer d'expliquer un peu mieux ce qui se passait:

la fn live () était à l'intérieur de la page que je chargeais. Et le premier load () la fn en direct attribue le gestionnaire à cliquer. Mais quand vous utilisez unload puis supprimez tous les éléments de cette page le lien entre un clic et les gestionnaires reste.

Et quand je chargeais à nouveau la même page (sans actualisation), la fonction live gardera l'ancien gestionnaire et aussi attacher à nouveau le gestionnaire, et ainsi de suite à chaque fois load () il est utilisé.

le truc il est à utiliser die () avant unload (). MAIS une chose à prendre en compte: nous ne pouvons pas utiliser enchaînant avec live() ($('div').children().live() ne fonctionnera pas) ET AUSSI bien:

$('.div .ctr').live() fonctionnera.

juste appeler $('.ctr').die() ne fonctionnera pas.

Donc, vous devez utiliser pour les deux fn le même sélecteur $('.ctr').live() puis $('.ctr').die()

cela vous aidera peut-être quelqu'un. Et aussi vérifier la nouvelle delegate () et undelegate () 1.4.2

Autres conseils

Je pense que vous pourriez avoir une faute de frappe en ayant ($ this-) vs $ (this);
A noter également qu'il existe un opérateur de suppression en javascript afin que vous voudrez peut-être essayer un autre nom de la fonction.
Vous pourriez également souffrir d'un cache quelque part (serveurs Web par défaut définir un cache pour les fichiers .js)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top