Tengo que leer un código de barras en una aplicación web. Sencillo, el
código se mete en un campo de texto y el propio scanner al finalizar
pasa un enter.
Pero el escanner no pasa enters, ni tabs, ni nada mas que los números
y necesito saber cuando se ha terminado de leer el código de barras.
Ya intenté con el tamaño del codigo, pero hay códigos de diferentes
tamaños asi que no se puede.
Ya intenté con un código que pase al final (me metí a event y le di un
dump) y nada todo igual, lo que cambia es el codigo ascii del caracter
nada mas, incluso al final todo es igual.
Ya intenté ver si con keypress, keyup y keydown, pero el lector hace
como si se estuvieran apachando teclas del teclado y hace los 3
eventos en su secuencia habitual.
Y se me acabaron las ideas y/o estoy bloqueado. ¿Alguna idea que la
comunidad pueda aportarme?
Muchas gracias por su ayuda.
--
Mario Soto
can...@gmail.com
..._
> --
> PHPGT :: Grupo de PHPeros de Guatemala
> email: ph...@googlegroups.com
> www: http://php.develsystems.com | http://groups.google.com/group/phpgt/
Saludos
Francisco Nieves
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe trying
to produce bigger and better idiots. So far, the Universe is winning.
" - Rich Cook
2010/7/22 Mauricio Deleon <lmdb...@gmail.com>:
--
$('#codigo').keypress(function(event){
if(!iniciado){
timer = setInterval('tiempo()',75);
iniciado = true;
}
contador = 0;
if (event.keyCode == '13') {
event.preventDefault();
codigo = $.trim($(this).val());
buscarCodigo();
}
});
function tiempo(){
contador++;
if(contador >= 10){
clearInterval(timer);
iniciado = false;
codigo = $.trim($('#codigo').val());
buscarCodigo();
--
PHPGT :: Grupo de PHPeros de Guatemala
email: ph...@googlegroups.com
www: http://php.develsystems.com | http://groups.google.com/group/phpgt/
Cuando el lector de código de barras lee algo lo hace en secuencia
rápida. Calcula el tiempo desde que se presionó la ultima tecla y si
el tiempo que pasa es X (intervalo x veces) activa la búsqueda. Ahora
lo que me decis del enter es un bug que se me había pasado por alto.
Hay que agregar
clearInterval(timer);
iniciado = false;
dentro del area donde se lee el enter. Luego limpio el intervalo para
que no siga haciendo busquedas cada vez que el intervalo sin presionar
la tecla suceda.
La diferencia entre el setInterval y setTimeOut es que el primero se
ejecuta hasta que se cierre la página o hasta el primer clearInterval.
El segundo se ejecuta una vez en el tiempo establecido. Si pusiera un
timeout cada vez que se presiona la tecla activaria la busqueda cada
vez que se cumpliera el tiempo para cada letra. La otra opcion sería
limpiar el timeout cada vez, pero esto puede tomar tiempo y si es en
una misma variable puede obstruir el clearTimeOut. En las pruebas que
hice me sucedió que no limpiaba correctamente y si escribia 5
caracteres me realizaba hasta 4 busquedas porque no limpiaba el
timeout. Es mas fácil trabajarlo con una variable porque hay tiempo
entre que se presiona una tecla y ejecuta la acción.
Hice ensayos y estuve a prueba y error. Hay varias formas de hacer las
cosas muchas veces y que no le mirés lógica no quiere decir que no
funciones. Mi explicación del porqué lo hice así alli está.
Gracias por el bug que encontraste y que ahora corrijo.
--
Mario Soto
can...@gmail.com
..._
...y a mi tía Carlota le dejo el gato para que lo cuide como solo ella sabe
--
--PHPGT :: Grupo de PHPeros de Guatemala
email: ph...@googlegroups.com
www: http://php.develsystems.com | http://groups.google.com/group/phpgt/