Lo que ocurre con los escáneres de códigos de barras es que generalmente se presentan como un teclado HID estándar. Por lo tanto, cada nuevo código escaneado se 'tipea' efectivamente después del anterior. Una solución que he usado en el pasado es ver cuánto tiempo pasa entre las pulsaciones de teclas en ese cuadro de texto. Si es más de 10 milisegundos (o alrededor de ese valor, creo que esta fue la mayor cantidad de tiempo que le tomó al escáner que estaba usando para 'escribir' un código completo), entonces es un código de barras nuevo, y debe eliminar todo antes .
no tengo un IDE a mano, por lo que la mayor parte de los nombres de clase/método son probablemente muy lejos, pero algo así como un ejemplo:
DateTime lastKeyPress = DateTime.Now;
void txtBarcode_KeyPress(object sender, KeyPressEventArgs args)
{
if(((TimeSpan) (DateTime.Now - lastKeyPress)).TotalMilliseconds > 10)
{
txtBarcode.Text = "";
}
lastKeyPress = DateTime.Now;
}
creo que debería hacerlo. Funciona porque el evento KeyPress ocurre antes de que el carácter se anexe, por lo que puede borrar primero el cuadro de texto.
Editar: Para configurar, supongo que donde quiera que tiene txtBarcode.TextChanged += txtBarcode_TextChanged
, que en cambio tienen un txtBarcode.KeyPress += txtBarcode_KeyPress
. Verifique que el nombre del evento sea correcto.
Editar 2:
jQuery Versión:
Asumiendo este código HTML (dado que está utilizando ASP, su fuente para la etiqueta de entrada será diferente, pero la salida todavía tendrá la id
atributo, que es realmente la única que importa):
<form action="" method="post">
<input type="text" name="txtBarcode" id="txtBarcode" />
</form>
Entonces este javascript funciona:
$(document).ready(function() {
var timestamp = new Date().getTime();
$("#txtBarcode").keypress(function(event)
{
var currentTimestamp = new Date().getTime();
if(currentTimestamp - timestamp > 50)
{
$(this).val("");
}
timestamp = currentTimestamp;
});
});
Parece que (al menos en un navegador web) 50 milisegundos es el tiempo necesario para permitir que entre los caracteres. He probado esto en Firefox, Chrome e IE7.
Esta es una pregunta perfectamente válida, tal vez el inglés no es perfecto, pero lo que él quiere es claro. – Kazar