2011-04-04 10 views
5

Tengo un problema levemente inusual relacionado con la forma. Mi aplicación web escucha la entrada del escáner desde un lector de código de barras. El lector de código de barras se presenta como la entrada de teclado en el siguiente formato:¿Detener nueva línea enviando un formulario?

~100.0101~\n 

donde \n es una nueva línea. Utilizo un oyente javascript global con una expresión regular: cada vez que el oyente "escucha" la entrada que coincide con la expresión regular, llamo a mi función barcodeHandler().

Por desgracia, este no interactúa bien con formas: si el usuario se centra en un formulario de entrada cuando se escanean, se envía el formulario y mensajes de vuelta antes de que el oyente entra en acción, ya que la forma \n toma para significar 'enviar '.

No puedo cambiar la entrada del escáner, entonces ¿hay alguna forma de que pueda detener el envío de formularios cuando se ingresa el \n?

Obviamente, todavía me gustaría que mis formularios funcionen con la tecla Intro, y prefiero no cambiar el comportamiento de formulario predeterminado si es posible.

muchas gracias!

+1

puede utilizar jQuery y asignar una función especial en las acciones clave y hacer event.preventDefault(); para evitar que la clave "enter" se procese como un envío del formulario. – ITroubs

+0

Gracias, aunque realmente me gustaría que la tecla Intro siga funcionando, simplemente no es el '\ n' que proporciona el escáner de código de barras. ¿Hay alguna forma de distinguir entre los dos? – AP257

+0

Ah, puedo simplemente aplicar el detector de eventos cuando se ha emparejado la primera parte de la expresión regular. Eso funciona. – AP257

Respuesta

8

lo necesario para capturar la pulsación prolongada en los controles de formulario y evitar la acción por defecto usando preventDefault() o return false.

// do this for all <input> <textarea> and <select> elements on the page. 
input.addEventListener("keypress", function(event){ 
    if (event.which == '10' || event.which == '13') { 
     event.preventDefault(); 
    } 
}, false); 

o el uso de jQuery:

$("input, textarea, select").keypress(function(event){ 
    if (event.which == '10' || event.which == '13') { 
     event.preventDefault(); 
    } 
}); 
+1

funciona como un encanto! Lo usé así: '$ (": input "). Keypress (// code)' porque quería capturar esto en todas las entradas. Gracias. +1 –

3

Reemplace el envío del formulario y proporcione su propia alternativa como un controlador onclick en el botón Enviar.

<form action="submit.php" onsubmit="return false;"> 
    Some input ...<input type="text"/> 
    <input type="button" value="Submit" onclick="parentNode.submit();"> 
</form> 
Cuestiones relacionadas