Foros del Web » Programando para Internet » Jquery »

Evitar multiple bindeo usando live() de jQuery

Estas en el tema de Evitar multiple bindeo usando live() de jQuery en el foro de Jquery en Foros del Web. Me esta pasando algo raro. Estoy bindeando un evento con live, sobre un dropdownlist de html que recibo dinamicamente. Por razones de diseño, esos select ...
  #1 (permalink)  
Antiguo 25/04/2012, 10:47
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Evitar multiple bindeo usando live() de jQuery

Me esta pasando algo raro. Estoy bindeando un evento con live, sobre un dropdownlist de html que recibo dinamicamente. Por razones de diseño, esos select (junto con mucho mas html) se eliminan y se vuelven a cargar con ajax. Y al hacerlo, los js se vuelven a ejecutar también. Por lo tanto, termino duplicando, triplicando, y cuatriplicando el bindeo de los eventos, cosa que me sorprende porque pensaba que live() se encargaba que cosas así no pasen.
Qué puedo hacer para evitar bindear dos veces el mismo evento?
  #2 (permalink)  
Antiguo 25/04/2012, 11:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Evitar multiple bindeo usando live() de jQuery

Usa unbind, recuerda que jQuery te permite darles un "namespace" a los eventos para eso, ej:
Código Javascript:
Ver original
  1. $('#elemento').unbind('.mynamespace');
  2. $('#elemento').bind('click.mynamespace', function() {
  3.      alert('solo una vez');
  4. });

Live solo se encarga de que el evento sea ejecutado siempre, aún cuando insertes nuevos elementos.
  #3 (permalink)  
Antiguo 25/04/2012, 11:45
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Evitar multiple bindeo usando live() de jQuery

Gracias. No sabía del namespace. Voy a leer un poco más.

De todas maneras, estaba haciendo unbind, pero sobre un selector equivocado. Por otro lado, encontré que die() es el opuesto a live() y que sin parametros unbindea todos los tipos de evento. Me queda esto:

Código Javascript:
Ver original
  1. ...
  2. allElements = appContainer.find('*');
  3. allElements.unbind().die();

Y sin embargo... estoy haciendo pruebas y no funciona. Se siguen multiplicando los eventos cada vez que reabro una aplicación. Creo que por esto:
Cita:
Note: In order for .die() to function correctly, the selector used with it must match exactly the selector initially used with .live().

Última edición por mayid; 25/04/2012 a las 13:06

Etiquetas: ajax, html, js, live
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:01.