¿Cómo puedo detectar mediante programación cuando la entrada de texto se completa escribiendo en el teclado y cuando se llena automáticamente con un escáner de código de barras?Detecta cuando el cuadro de entrada se llena con el teclado y cuando se utiliza un escáner de código de barras.
Respuesta
bien un código de barras, dejará de eventos clave por lo que podría hacer algo como:
$('#my_field').on({
keypress: function() { typed_into = true; },
change: function() {
if (typed_into) {
alert('type');
typed_into = false; //reset type listener
} else {
alert('not type');
}
}
});
Dependiendo de cuando se quiere evaluar esto, es posible que desee hacer esta comprobación no en el cambio, pero en enviar , o lo que sea.
Puede usar un evento "onkeyup" en ese cuadro de entrada. Si el evento se ha activado, puede llamarlo "Entrada desde el teclado".
Escribí esta respuesta, porque mi Barcode Scanner Motorola LS1203 generó un evento de pulsación de tecla, por lo que no puedo usar la solución de Utkanos.
Mi solución es:
var BarcodeScanerEvents = function() {
this.initialize.apply(this, arguments);
};
BarcodeScanerEvents.prototype = {
initialize: function() {
$(document).on({
keyup: $.proxy(this._keyup, this)
});
},
_timeoutHandler: 0,
_inputString: '',
_keyup: function (e) {
if (this._timeoutHandler) {
clearTimeout(this._timeoutHandler);
this._inputString += String.fromCharCode(e.which);
}
this._timeoutHandler = setTimeout($.proxy(function() {
if (this._inputString.length <= 3) {
this._inputString = '';
return;
}
$(document).trigger('onbarcodescaned', this._inputString);
this._inputString = '';
}, this), 20);
}
};
Si se puede establecer un prefijo a su escáner de código de barras que sugiere esto (he cambiado un poco el código Vitall):
var BarcodeScanner = function(options) {
this.initialize.call(this, options);
};
BarcodeScanner.prototype = {
initialize: function(options) {
$.extend(this._options,options);
$(document).on({
keyup: $.proxy(this._keyup, this)
});
},
fire: function(str){
$(document).trigger('barcode',str);
},
_options: {timeout: 600, prefixKeyCode: 36, suffixKeyCode: 13, minKeyCode: 32, maxKeyCode: 126},
_isReading: false,
_timeoutHandler: false,
_inputString: '',
_keyup: function (e) {
if(this._isReading){
if(e.keyCode==this._options.suffixKeyCode){
//read end
if (this._timeoutHandler)
clearTimeout(this._timeoutHandler);
this._isReading=false;
this.fire.call(this,this._inputString);
this._inputString='';
}else{
//char reading
if(e.which>=this._options.minKeyCode && e.which<=this._options.maxKeyCode)
this._inputString += String.fromCharCode(e.which);
}
}else{
if(e.keyCode==this._options.prefixKeyCode){
//start reading
this._isReading=true;
this._timeoutHandler = setTimeout($.proxy(function() {
//read timeout
this._inputString='';
this._isReading=false;
this._timeoutHandler=false;
}, this), this._options.timeout);
}
}
}
};
uso con prefijo estándar (tecla HOME) y el sufijo (ENTER):
new BarcodeScanner();
...
$(document).on('barcode',function(e,str){
console.log(str);
});
Si necesita personalizar el tiempo de espera, el sufijo, prefijo, min/max ascii código readed:
new BarcodeScanner({timeout: 600, prefixKeyCode: 36, suffixKeyCode: 13, minKeyCode: 32, maxKeyCode: 126});
puede probar siguiente ejemplo, usando jQuery plugin de https://plugins.jquery.com/scannerdetection/
Su detector altamente configurable, tiempo basado escáner. Se puede usar como solución para el escáner de código de barras basado en el tiempo basado en el prefijo/postfijo.
Tutorial de uso y mejores prácticas, así como sobre diversos modelos de escáneres de códigos de barras y cómo solucionarlos. http://a.kabachnik.info/jquery-scannerdetection-tutorial.html
$(window).ready(function(){
\t //$("#bCode").scannerDetection();
\t console.log('all is well');
\t
\t $(window).scannerDetection();
\t $(window).bind('scannerDetectionComplete',function(e,data){
console.log('complete '+data.string);
$("#bCode").val(data.string);
})
.bind('scannerDetectionError',function(e,data){
console.log('detection error '+data.string);
})
.bind('scannerDetectionReceive',function(e,data){
console.log('Recieve');
console.log(data.evt.which);
})
//$(window).scannerDetection('success');
<input id='bCode'type='text' value='barcode appears here'/>
Gracias. Me has alegrado el día. Justo lo que estaba buscando. :) –
La solución de Vitall sólo funciona bien si ya golpeado al menos una clave. Si no lo haces, se ignorará el primer carácter (if (this._timeoutHandler) devuelve falso y el carácter no se agregará).
Si desea empezar a escanear inmediatamente se puede utilizar el siguiente código:
var BarcodeScanerEvents = function() {
\t this.initialize.apply(this, arguments);
};
BarcodeScanerEvents.prototype = {
\t initialize : function() {
\t \t $(document).on({
\t \t \t keyup : $.proxy(this._keyup, this)
\t \t });
\t },
\t _timeoutHandler : 0,
\t _inputString : '',
\t _keyup : function(e) {
\t \t if (this._timeoutHandler) {
\t \t \t clearTimeout(this._timeoutHandler);
\t \t }
\t \t this._inputString += String.fromCharCode(e.which);
\t \t this._timeoutHandler = setTimeout($.proxy(function() {
\t \t \t if (this._inputString.length <= 3) {
\t \t \t \t this._inputString = '';
\t \t \t \t return;
\t \t \t }
\t \t \t $(document).trigger('onbarcodescaned', this._inputString);
\t \t \t this._inputString = '';
\t \t }, this), 20);
\t }
};
- 1. Ocultar el teclado de entrada suave cuando se cierra el cuadro de diálogo
- 2. ¿Cómo puedo saber si la entrada del teclado proviene de un escáner de código de barras?
- 3. Lectura de un código de barras utilizando un escáner de código de barras USB ignorando la entrada de datos del teclado mientras no se conoce el identificador del producto del escáner y la identificación del proveedor
- 4. lectura desde el escáner de código de barras
- 5. Controlar el rastreador cuando se utiliza Twinx
- 6. iOS evento cuando el teclado se oculta
- 7. especificar el nombre de un hilo cuando se utiliza Task.StartNew
- 8. Internet Explorer, jQuery: cuadro de entrada salta/se mueve cuando se reemplaza por el mismo
- 9. API para el escáner de código de barras IOS PDF417
- 10. que presentan el formulario de inicio de sesión de entrada cuando la tecla de retorno en el teclado se toca
- 11. .htaccess se ignora cuando se utiliza un URI con alias
- 12. ¿Cómo se detecta cuando un archivo de sonido ha terminado?
- 13. Escáner de código de barras Quartz Composer
- 14. Ignorar última \ n cuando se utiliza con el pitón readlines
- 15. ¿Cómo implementar barras de herramientas cuando se utiliza el patrón MVVM?
- 16. UIPopoverView se distorsiona cuando se muestra el teclado + iPad
- 17. Request.Files está vacío cuando se utiliza un archivo de tipo de entrada con ASP.Net MVC
- 18. El teclado OnScreen se abre automáticamente cuando se inicia Actividad
- 19. de error cuando se utiliza [openActiveSessionWithPublishPermissions FBSession: ..]
- 20. Evitar la repetición de código cuando se utiliza LINQ
- 21. ¿Cómo se previene de diálogo de impresión cuando se utiliza el método de Excel PrintOut
- 22. ¿Lee el código de barras cuando el programa no tiene foco?
- 23. Cualquier evento de Android cuando se desliza el teclado
- 24. Cómo configurar el tipo de contenido cuando se utiliza initWithContentsOfUrl
- 25. ¿Cómo se detecta cuando se cambia un archivo en iCloud?
- 26. líneas múltiples cuando se utiliza el método de jQuery .html
- 27. Borrar el foco EditText cuando se presiona el botón Atrás cuando el teclado está mostrando
- 28. El selenio tiene un problema IPv6 cuando se utiliza firefoxdriver
- 29. ado.net conexión de cierre cuando se utiliza el "uso" declaración
- 30. error cuando se utiliza mutex
gracias. Pero, ¿cómo puedo detectar cuándo se introdujeron los códigos de barras? El evento 'onCange' se levanta solo cuando el elemento pierde el foco, pero necesito saber el valor insertado inmediatamente después de insertarlo. Puedo hacer un temporizador y verificar periódicamente el valor en el campo de texto, pero creo que es una solución incorrecta. – MyTitle
No mencionó en su pregunta cuándo exactamente quería verificar la entrada, así que asumí onChange. Sí, creo que un temporizador es probablemente la única forma de hacerlo, a menos que la aplicación de código de barras dispare algún tipo de evento personalizado cuando manipula la página. – Utkanos