jquery click event se activa varias veces al usar el selector de clases


Aquí está mi html

<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 enlace de evento jquery con 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 dispararía un evento de clic y cuando llamo this.id, me acaba de obtener esa identificación del elemento que hice clic.

Pero en su lugar se parece a:

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

Está disparando una y otra vez incluso pensé que solo hice clic en un enlace. Puse una declaración depurador en su y utilizado firebug y vio esto conseguir llamado y sobre.

¿Alguna idea de lo que está pasando?

Author: leora, 2010-01-08

10 answers

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

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

No

<li>
<li>
 18
Author: Erik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-07 23:31:05

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

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

 69
Author: user512568,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-05 13:07:13

En mi caso, tenía varias pestañas que rendían el mismo parcial y cada parcial tenía el document(documento).llamada ready () que enlazó el evento click tres veces.

 14
Author: Pratik Khadloya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-22 00:54:31

Agregar estas dos líneas lo resolvió para mí:

event.stopPropagation();
event.preventDefault();

Fuente: http://code.google.com/intl/en/mobile/articles/fast_buttons.html

 9
Author: Johan B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-15 11:07:59

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

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

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

editar:

Jeh, como otros han señalado... Asegúrese de que su marcado también sea válido: P

 6
Author: rfunduk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-08 00:19:41

Mi problema fue que tenía mi enlace de evento en un bucle cuando creé las <div> s, agregando así el evento una y otra vez para cada elemento del evento. Es algo para verificar.

 6
Author: chrishawn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-05 13:09:33

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

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

El evento se disparó varias veces.. utilizado .off () para eliminar todos los controladores de eventos anteriores. (utilice la misma firma utilizada en .on ())

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

Espero que ayude a alguien...

 4
Author: chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-06 07:34:22

Desde el HTML publicado, parece que los DIVs de MyLink están anidados, lo que hace que el evento se dispare varias veces, ya que cada DIV recibe el clic. Como se ha señalado, asegúrese de que las etiquetas están bien formadas. ¿Se supone que las etiquetas DIV al final de cada línea son etiquetas de cierre?

 1
Author: leepowers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-07 23:29:54

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

 1
Author: Snake_Tn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-02 14:07:04

Tengo Se produce El Mismo problema si estoy ejecutar el mismo código en la página simple que su trabajo correctamente. cuando hago clic en el botón que tienen la misma clase usando ese índice de clase, quiero alternar un div, pero cuando hago clic en el botón en ese momento, la función llama varias veces.

Por ejemplo : si tengo 4 botón y cuatro div y haga clic en segundo botón ocultar/mostrar segundo div. Pero la ejecución de la función se repite 3 veces[es decir, hasta el índice de clase]

¿Qué es la razón? Utilicé algunos otros js siguientes también para este propósito este error se produce?

<script type="text/javascript" src="vendors/jquery-validation-engine/js/jquery.validationEngine.js"></script>

<script type="text/javascript" src="vendors/jquery-validation-engine/js/jquery.validationEngine-en.js"></script>

<script type="text/javascript" src="vendors/jquery-validation/js/jquery.validate.js"></script>

<script type="text/javascript" src="vendors/datepicker/js/bootstrap-datepicker.min.js"></script>

<script type="text/javascript" src="js/pluginjs/jasny-bootstrap.js"></script>

<script type="text/javascript" src="vendors/holderjs/js/holder.js"></script>

<script type="text/javascript" src="vendors/bootstrapvalidator/js/bootstrapValidator.min.js"></script>

<script type="text/javascript" src="vendors/twitter-bootstrap-wizard/js/jquery.bootstrap.wizard.min.js"></script>

<script type="text/javascript" src="js/pages/wizard.js"></script>

<script type="text/javascript" src="vendors/moment/js/moment.min.js"></script>
 0
Author: prakash kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-26 07:29:26