¿Por qué mi función de cambio se llama dos veces cuando uso .focus ()?
TLDR
Mira estoejempl en cromo. Escriba algo y presionetab
. ver aparecer un nuevo cuadro escriba algo y presioneenter
. vea aparecer dos nuevos cuadros, donde se espera uno. Introducción
Noté que al usarenter
en lugartab
para cambiar los campos, mi función de cambio en un campo de entrada se disparó dos veces. Esta página era bastante grande y todavía estaba en desarrollo (léase: muchos otros errores), así que hice un ejemplo mínimo que muestra este comportamiento, y en este caso incluso lo hace en la pestaña. Esto es solo un problema enCrom Por lo que yo puedo decir
Lo que debería hacer
Quiero hacer una nueva entrada después de ingresar algo en el campo de entrada. Este campo debería enfocarse.
Ejemplo
javascript - necesitando jquery
function myOnChange(context,curNum){
alert('onchange start');
nextNum = curNum+1;
$(context.parentNode).append('<input type="text" onchange="return myOnChange(this,'+nextNum+')" id="prefix_'+nextNum+'" >');
$('#prefix_'+nextNum).focus();
return false;
}
HTML-part
<div>
<input type="text" onchange="return myOnChange(this,1);" id="prefix_1">
</div>
el código completo eson pastebin. necesita agregar su ruta a jquery en el script
Un ejemplo de trabajo está aquí en jFiddle
El onchange recibe dos llamadas: elmyOnChange
e llama a la función @, realiza la nueva entrada, llama a lafocus()
, elmyOnChange
vuelve a llamarse, realiza una nueva entrada, el 'interno'myOnChange
sale y luego la 'externa'myOnchange
salidas.
Supongo que esto se debe a que el cambio de enfoque activa laonchange()
?. Sé que hay alguna diferencia de comportamiento entre los navegadores en esto.
Me gustaría detener el .focus () (que parece ser el problema) para NO llamar alonchange()
, asi quemyOnChange()
no recibe llamadas dos veces. ¿Alguien sabe cómo?