2010-01-07 19 views
27

aquí está mi htmlevento jQuery clic está disparando varias veces al usar selector de clase

<li><div class="myLink" id=1>A<div> 
<li><div class="myLink" id=2>b<div> 
<li><div class="myLink" id=3>c<div> 
<li><div class="myLink" id=4>d<div> 
<li><div class="myLink" id=5>d<div> 
<li><div class="myLink" id=6>e<div> 
<li><div class="myLink" id=7>d<div> 
<li><div class="myLink" id=8>g<div> 

he creado un aprieto evento jQuery wiht este código:

jQuery(".myLink").click(function(event) { 

     var myId = this.id; 

     location.href = '/x/y?myId=' + myID; 
    }); 

cuando hago clic en uno de los enlaces (los elementos li). pensé que se dispararía un solo clic y cuando llame a this.id, obtendría ese id del elemento que hice clic.

Pero en cambio parece que el:

jQuery(".myLink").click(function(event) { 

está disparando una y otra vez hasta pensaban que acaba de hacer clic en un enlace. Puse una declaración de depurador en su y usé firebug y vi que se llamaba una y otra vez.

¿Alguna idea de qué está pasando?

Respuesta

17

Si cierra sus etiquetas <li>, solucionará el problema. Acabo de probarlo, y eso lo corrige. Debe ser

<li> ... </li> 
<li> ... </li> 

no

<li> 
<li> 
+0

Tuve un problema similar con la etiqueta img, por lo que @Erik tiene razón. Creo que cada etiqueta debe tener etiqueta de cierre para deshacerse de este problema. –

6

Intente poner el valor del atributo id entre comillas. Cosas extrañas suceden cuando acaba de poner id=1.

Además, ¿cómo sabe que está disparando varias veces? Ponga esta línea de la parte superior de la función y ver el incendiario de registro para ver lo que está sucediendo:

console.log("clicked on", jQuery(this), "which has id", jQuery(this).attr('id')); 

edición:

Je, como otros han señalado ... Asegúrese de que su margen de beneficio es válido también : P

+0

De acuerdo. Use id = "1", id = "2", id = "3", etc. – PHLAK

+7

También recomendaría cerrar sus elementos div y li correctamente. – alex

+1

tener el atributo ID en las etiquetas no tendrá ningún efecto, solo FYI – Erik

1

Desde el HTML publicado parece que myLink DIV está anidado, lo que hace que el evento se active varias veces, ya que cada DIV recibe el clic. Como se indicó, asegúrese de que las etiquetas estén bien formadas. ¿Se supone que las etiquetas DIV al final de cada línea están cerrando las etiquetas?

+0

me golpeó al golpe :) – Erik

+0

No estás solo ... – zehrer

69

que tenía un problema similar y la solución para mí fue desenlazar el evento de clic antes de declarar el evento click. No tiene mucho sentido, pero no tenía idea de cómo los eventos múltiples se unen a un solo elemento HTML. (Y mi HTML parecía válida;))

$ ('remove_lkc '.) Desenlazar (' clic') haga clic en (function() {..........

+0

Tuve el problema descrito en OP, pero mi HTML estaba bien formado. La corrección publicada por @ user512568 funcionó para mí. Gracias por compartir. – groundh0g

+8

Si eso lo solucionó, probablemente estabas volviendo a vincular el evento click en algún punto del camino. Los conceptos básicos sobre cómo volver a vincular se tratan aquí: http://www.learningjquery.com/2008/05/working-with-events-part-2 – Riko

+0

Tuve un problema similar. $ ('. class'). on ('click', function() {}); solo estaba aplicando oyentes de eventos a todos los demás elementos. No estoy seguro de por qué, pero el primer enlace parece haberlo solucionado. ¡Gracias! –

6

Mi problema fue que tuve mi evento vinculante en un bucle cuando creé el <div> s, agregando el evento una y otra vez para cada elemento en el evento. Es solo algo que debe verificarse.

+2

Exactamente este problema. Estaba usando un selector de clase $ (". Clase"). Clic (función()) dentro del bucle, así que estaba agregando múltiples manejadores de clics cada iteración de bucle. Asegúrese de que su controlador .click esté configurado fuera del ciclo. – user1507720

14

En mi caso, he tenido varias pestañas haciendo que el mismo elemento parcial y cada parcial tenido el $ (document). llamada ready() que enlazó el evento click tres veces.

+4

D'oh! Coloqué mi js en la parte superior de la plantilla parcial solo para probarla mientras estaba trabajando en ella y estaba disparando cuatro veces. Me hizo rascar la cabeza ya que los otros comentarios no parecían encajar en mi situación, ¡así que gracias por señalar esto! Me olvidé por completo de que estaba usando la plantilla en otras partes de otras pestañas ... –

+0

Me siento tan estúpido en este momento –

1

Asegúrese de no incluir el script js varias veces. si está utilizando un marco en el sitio del servidor, asegúrese de que el diseño y las plantillas no incluyan el mismo script.

4

En mi caso, el javascript tiene que ser renderizado junto con la solicitud de ajax.

$(document).ready(function(){ 
    $(document).on('click','.className',function(){alert('hello..')}) 
}); 

el Evento dispararon múltiples veces .. utilizaron .OFF() para eliminar todos los controladores de eventos anteriores. (utilización misma firma utilizado en .on())

$(document).ready(function(){ 
    $(document).off('click','.className'); 
    $(document).on('click','.className',function(){alert('hello..')}); 
}); 

espero que ayude a alguien ...

+0

¡Gracias! Funciona como el encanto, salvas mi día –

+0

mina dos, gracias @ chris .. –

+0

¡Gracias! Me salvó el día también – FastTrack

Cuestiones relacionadas