Haz todo lo posible por entender el código de forma correcta previamente a adaptarlo a tu trabajo y si tdeseas aportar algo puedes compartirlo con nosotros.
Solución:
Entonces, primero debe comprender que los escáneres de códigos de barras fingen ser teclados. Por lo tanto, activarán eventos de pulsación de teclas JS como teclados reales. La única forma que se me ocurre de separar los 2 es alguna heurística basada en el tiempo (la idea es que nadie puede escribir un código de barras completo de 10 dígitos en menos de 0,1 segundos).
Entonces, básicamente, tendrías un javascript que haría algo como esto:
- (onkeydown) agregar el presionado key a un mundial string e inicie un temporizador con setTimeout (con un retraso muy bajo, digamos 10 ms)
- (onkeydown) agregar el presionado key como antes, pero no vuelvas a poner en marcha el cronómetro
- en su función setTimeout, verifique si el string de pulsaciones de teclas es por lo menos 3 keys (o más, dependiendo de los códigos de barras que espera). Si es así, escribe el string al campo de entrada. De lo contrario, suelte el string
- enjuague y repita
Va a ser feo, pero si estás De Verdad desesperado, podría funcionar
var delay = (function()
var timer = 0;
return function(callback, ms)
clearTimeout (timer);
timer = setTimeout(callback, ms);
;
)();
$("#txtInput").on("input", function()
delay(function()
if ($("#txtInput").val().length < 8)
$("#txtInput").val("");
, 20 );
);
Seguí pensando después de publicar mi respuesta para encontrar una solución porque en los días de DOS/Windows solía ser una solicitud bastante común, pero no en la web.
Lo que puede hacer es configurar su escáner y enviar como comienzo de un escaneo un conjunto de string chars como el "punto de partida" para el escaneo y luego algunos otros chars como el final, estaba pensando en algo como esto:
@@[email protected]@TU ESCANEO REAL VA [email protected]@[email protected]@r
Y luego puede filtrar el contenido de ese campo en el carácter ENTER y verificar si proviene de su escáner o no y luego asignarlo. No estoy seguro de si su escáner admite datos pendientes previos y posteriores a su escaneo, pero si lo hace, definitivamente vale la pena intentarlo.