2010-03-05 43 views
10

Estoy teniendo un cuadro de texto y se le asignó la siguiente función (que es la única función asignada):jQuery: cuadro de texto keyup disparando dos veces

txt.bind("keyup",function(event){ 
    if(event.keyCode==13) 
    { 
     var nu = $("#debug").html(); 
     nu+="<br>enter"; 
     $("#debug").html(nu); 
    } 
}); 

Lo extraño es que en realidad está disparando dos veces, mostrando de este modo "entrar" dos veces en mi ventana de depuración ¿Alguien sabe qué está causando esto?

+0

en mi caso estaba usando una pistola de escáner y simula las teclas de teclado para cada carácter escrito, así que utilicé la herramienta de detección de jquery, https://codepen.io/krissco/pen/XdywLo resolvió mi problema, su tiempo de comprobación entre keup para distinguir entre las teclas normales :) – shareef

Respuesta

3

me enteré - txt.bind se asignó dos veces al cuadro de texto, por lo que se disparó dos veces. ¿es esto un error? pensé que una función de enlace siempre se activará solo una vez ... hmm

+2

por favor proporcione sus códigos como se le preguntó antes ...descubrimos :-) –

+1

Esto no es un error porque es posible que desee dos funciones separadas para disparar en la tecla. Solo debes tener cuidado cuando crees el enlace. – EndangeredMassa

0

¿podría ser posible que su elemento html esté contenido dos veces dentro de txt?

sería útil si proporcionas el html y la asignación del código javascript.

2

estoy teniendo el mismo problema - keyup y keydown eventos se disparó dos veces a pesar de sus manejadores están obligados solamente una vez, y sin duda los estoy uniendo a un solo elemento.

Lo interesante es que este comportamiento solo se puede observar en Internet Explorer y en un solo caso especial donde mi aplicación web se muestra en un control ActiveX incorporado (CLSID_InternetExplorer). Sistema operativo: Windows 7, IE 8, el control ActiveX incorporado se ejecuta en modo de compatibilidad IE7.

Sin embargo, he encontrado una solución alternativa: procesar el evento keypress de jQuery, lo que también tiene más sentido semántico en mi aplicación web.

+0

Puedo confirmar que el problema está relacionado con el evento "keyup", incluso en jQuery v3.3.1 (la última). Cambiarlo a "presionar tecla" resuelve el problema. –

1

I tenían un problema similar
encontraron que objeto con función asignada keyup estaba dentro de otro objeto
primero fue div segunda era de entrada
encontró que keyup fue asignado a la entrada y a un div con esta entrada

0

aquí está mi solución para el mismo problema:

$('input').live('keyup keydown', function(e) { 
    var thisKey = e.keyCode ? e.keyCode : e.which; 
    if (thisKey == 13) { 
     e.preventDefault(); 
     e.stopPropagation(); 
     if (e.type == 'keyup') { 
      $(this).closest('form').submit(); 
     } 
    } 
}); 
4

yo sé que ha pasado bastante tiempo, pero me sorprende que nadie sugirió:

txt.unbind(); 
txt.bind("keyup",function(event){ 
    if(event.keyCode==13) 
    { 
     var nu = $("#debug").html(); 
     nu+="<br>enter"; 
     $("#debug").html(nu); 
    } 
}); 

Si de alguna manera txt ya está enlazado, llame al para desvincular antes de que su nuevo enlace lo arregle. Por supuesto, es preferible descubrir por qué está limitado dos veces. Esto me pasó a mí, porque accidentalmente tuve mi archivo JavaScirpt incluido dos veces. Llamar desvinculación me ayudó a determinar que ese era el problema.

1

Tuve el mismo problema. Aunque todavía no pude encontrar una solución, encontré la razón por la cual se dispara dos veces.

Estoy entregando el evento si el texto introducido tiene "@". Para esto estoy enumerando cada golpe de tecla. Para ingresar '@' necesita dos precesos de tecla (@ + shift) y esa es la razón por la que se activa dos veces.

+0

¡Obvio cuando lo piensas! :-) –

Cuestiones relacionadas