event - keydown javascript ejemplo
Entrada de incendios Keypress evento dos veces (7)
Esta pregunta ha sido formulada / contestada (en su mayoría) antes, PERO, he intentado tres cosas para evitar que el evento se llene de burbujas pero nada ha funcionado:
return false;
e.stopPropagation();
e.preventDefault();
(devolver falso debería cuidar de los otros dos, ¿correcto?)
Aquí está el html:
<div class="tags-holder">
<input type="text" class="addField" id="addField_<%= visit.id %>" placeholder="add a new tag">
</div>
Y el JS (ACTUALIZACIÓN LIMPIEZA):
$(''.addField'').show().keyup(function(event){
event.preventDefault();
if(event.keyCode == 13 || event.keyCode==9) {
ProfilePage.createTag( this, ''nada'', ''addField'')
$(this).hide().val('''');
return false;
}
});
Dejé los tapones redundantes allí, pero ¿realmente no debería devolver falso simplemente matar el burbujeo? (utilizando Chrome).
¿Pista? keyCode = 13 es "Enter"
¿Qué crees que es atrapar el evento cuando burbujea? Sólo tengo un disparo con esta página de prueba.
<!DOCTYPE html>
<html>
<head>
<title>Scratch</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.setOnLoadCallback(function (){
$(''input[type="text"]'').keyup(function (){
console.debug(''keyup'');
});
});
google.load(''jquery'', ''1.6.4'');
</script>
</head>
<body>
<div class="something">
<input type="text" />
</div>
</body>
</html>
Tal vez sea tu selector. ¿Está anidado dentro de otro .addTag? Cuando cambio el selector jQuery y también hago el div y entro en la misma clase, comienzo a disparar dos eventos. Me gusta esto:
$(''.thing'').show().keyup(...);
...y...
<div class="thing">
<input class="thing" type="text" />
</div>
Espero que esto resuelva su problema. En lugar de usar event.preventDefault (), use los dos que se muestran a continuación. En el caso de los navegadores de Microsoft use event.cancelBubble = true; En el caso de los navegadores modelo W3C use event.stopPropagation ();
Y en lugar del evento Keyup, utilice amablemente el evento de pulsación de tecla, ya que durante la pulsación de tecla, la entrada se enviará al campo de entrada para que aparezcan en el campo las entradas que no desee que aparezcan. Así se activará el evento del botón enter.
En lugar de devolver false, use event.returnValue = false.
Este es un problema que siempre me vuelve loco, pero creo que esta es la solución. Simplemente devuelva falso. Si devuelve verdadero, se repetirá al azar, así que supongo que debe tener un oyente que escuche las respuestas verdaderas.
Respuesta corta Add return false;
$("#register-form #first_name").keyup(function(event) {
console.log(''hello world'');
return false;
});
En la pregunta original, si observa detenidamente el código, parece que el retorno falso se escribió una línea demasiado pronto.
Guau. Su ayuda fue excelente y me ayudó a pensarlo bien.
PERO la solución se siente un poco como un escape; Efectivo, pero la condición nunca debería estar allí en primer lugar.
Aquí está, que encontré en los comentarios de aquí: http://yuji.wordpress.com/2010/02/22/jquery-click-event-fires-twice/
$(''.plus'').unbind(''click'').bind(''click'',function(e){
console.log(''clicked'')
var id=$(this).attr(''plus_id'');
var field=$(''<input type="text">'').attr({''placeholder'':''add a new tag'',''id'': ''addField_'' + id, ''visit_id'':id});
field.focus();
field.show().keydown(function(event){
event.stopImmediatePropagation();
if(event.keyCode == 13 || event.keyCode==9) {
console.log(event)
ProfilePage.createTag( field, ''nada'', ''addField'')
field.hide().val('''');
return false;
}
}).click(function(e){
return false;
})
;
$(this).append(field);
return false;
});
Intenta cambiar todas las instancias de
$(field).functionCall()
a
field.functionCall()
ya que el campo ya es un objeto jQuery.
Ok, ahora hemos establecido que este no fue el error. Probé en Firefox 7 y Chrome 15 y vi que el bloque de código en la instrucción if solo se activa una vez cuando se presiona Enter. Intente verificar para asegurarse de que algo dentro de la función createTag () no esté haciendo algo dos veces.
Primero intente desenlazar el evento, luego enlácelo;
$(''.addField'').show().unbind(''keyup'').keyup(function(event){
event.preventDefault();
if(event.keyCode == 13 || event.keyCode==9) {
ProfilePage.createTag( this, ''nada'', ''addField'')
$(this).hide().val('''');
return false;
}
Una explicación está here , había escrito un post sobre esto en mi nuevo blog.
Tuve el mismo problema y utilicé el método anterior y funcionó para mí.
$(document).unbind(''keypress'').bind(''keypress'', function (e) {
// some logic here
});