Pregunta

I se carga una página con carga () y luego crear dinámicamente

tag a. Luego uso directo () para enlazar un evento de clic y dispara una función. En el extremo de descarga de una llamada ().

El problema es que cuando me carga la misma página de nuevo (sin actualizar) cuando el haga clic en la función se disparó dos veces. Si salgo de nuevo (de nuevo con descarga ()) y cargar la página de nuevo al hacer clic se dispara 3 veces y así sucesivamente .... Una muestra de mi código es:

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

Tengo otra dentro $.post en esta página y también en lo anterior FNC en vivo y todo el trabajo bien. La de arriba también funciona pero como he dicho en la segunda carga se disparará dos veces y las 3 veces y así sucesivamente ... La parte extraña para mí es que si replece la consola con console.log ( 'dos'); guardar la página y cargar la página sin refresco que se disparará en un filas diferentes - uno dos -

Si descargo la página reemplazar la consola con console.log ( 'tres'); y la carga de nuevo se disparará uno dos y tres. Trato de uso:

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

$.ajaxSetup ({ cache: false });

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

nada de esto está funcionando. Y tengo este problema sólo en este FNC. ¿Qué opinas, que podría ser la razón, se recuerda que recuerda la acción anterior y se vuelve a disparar?

¿Fue útil?

Solución 2

De hecho la respuesta pertenece a @vittore.

Yo sólo va a tratar de explicar un poco mejor lo que estaba ocurriendo:

fn live () estaba dentro de la página que estaba cargando. Y en el primer load () el fn vivo asigna el controlador para hacer clic. Pero cuando se utiliza de descarga y después de quitar todos los elementos de la página que la conexión entre clic y manipuladores de restos.

Y cuando estaba cargando de nuevo la misma página (sin actualizar), la función live va a mantener el controlador antiguo y también conectar el controlador de nuevo, y así sucesivamente cada load () vez que se utiliza.

el truco es usar die () antes unload (). Pero una cosa más a tener en cuenta: no podemos usar el encadenamiento con live() ($('div').children().live() no funcionará), y también a pesar de:

$('.div .ctr').live() va a funcionar.

simplemente llamando $('.ctr').die() no funcionará.

Así que hay que utilizar tanto para el mismo fn $('.ctr').live() selector y luego $('.ctr').die()

Tal vez esto ayude a alguien. Y también comprobar la nueva 1.4.2 delegate () y undelegate ()

Otros consejos

Creo que es posible que tenga un error tipográfico por tener ($ this) vs $ (this);
También tenga en cuenta que hay un operador delete en javascript así que sería bueno probar otro nombre de la función.
También podría estar sufriendo de una caché en alguna parte (servidores web, por defecto, una memoria caché para archivos .js)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top