Visualizzazione dei risultati da 1 a 4 su 4

Discussione: lettore di barcode

  1. #1
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998

    lettore di barcode

    Ho la necessita' di acquisire dati numerici da un lettore di barcode, ma operando in modo tale chi il dato pervenga al corretto campo ricevente a prescindere dall'oggetto che possiede il focus.
    Poiche' il lettore fornisce i dati sull'interfaccia di tastiera e non e' possibile configurarlo in alcun modo, il metodo che ho escogitato per discernere la provenienza dei dati e' quello di monitorare la durata della pausa fra l'introduzione dei singoli caratteri... sperando che la velocita' di trasmissione dei dati da parte del lettore fosse distinguibile da quella fornita da "semplici" dita sulla tastiera.

    Sono arrivato a creare questa pagina di prova:

    codice:
    <script>
    var car = "";
    var tempo = undefined;
    var fuoco;
    function parte() {
    	p = document.myForm.pistola;
    	tasto = event.keyCode
    	if (tasto>=48 && tasto<=57 && fuoco!=p && !event.shiftKey) {
    		if(tempo) {
    			p.focus();
    			clearTimeout(tempo);
    			tempo = undefined;
    			p.value += car;
    //			return true;
    		} else {
    			car = String.fromCharCode(tasto)
    			event.keyCode = 0; 
    			event.cancelBubble = true; 
    			event.returnValue = false; 
    			tempo = setTimeout("ferma()",1);
    		}
    	}
    }
    function ferma() {
    	if (fuoco) fuoco.value += car;
    	tempo = undefined;
    }
    </script>
    <body onkeydown="parte()">
    <form name=myForm>
    <input type=text name=AltroCampo0
    	onfocus="fuoco=this;" onblur="fuoco=undefined;">
    
    <input type=text name=AltroCampo1
    	onfocus="fuoco=this;" onblur="fuoco=undefined;">
    
    Barcode: <input type=text name=pistola 
    	onfocus="fuoco=this;" onblur="fuoco=undefined;">
    
    </form>
    </body>
    Come si puo' notare ho ridotto fino ad un solo millesimo di secondo il tempo di pausa prima dell'intervento dello script che segnala che si sta digitando da tastiera... ma questo intervallo non e' sufficiente se l'utente tiene premuto un tasto scatenando la ripetizione automatica...

    Tenendo conto che mi occorre per una intranet equipaggiata con IE6, avete qualcosa da suggerirmi?

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    ciao br1,
    non so se mi è chiara la questione....in pratica hai questo lettore che fa scaturire eventi come se premesse la tastiera? e devi distinguere che questi eventi non siano stati generati da un "umano" che digita numeri?

    io sto provando ora il tuo script, ma non riesco (anche tenendo premuto) a ricadere nella condizione in cui tempo!=undefined
    (IE6 su WinXP).

    sono riuscito a capire l'effetto che dici solo aumentando il ritardo e tenendo premuto.

    con un 1 nel setTimeout quindi nel mio computer funziona, ma il setTimeout non segue le indicazioni che gli dai , nel senso che il ritardo minimo è per Explorer circa una decina di millisecondi (anche se setti il ritardo ad 1).

    secondo me potresti cavartela settando una flag sul keyup, così capisci se sta continuando a premere o meno..non so....
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    meglio ancora, quella flag (per controllare se il tasto è e continuamente premuto) c'è già:

    event.repeat

    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Originariamente inviato da standard
    meglio ancora, quella flag (per controllare se il tasto è e continuamente premuto) c'è già:

    event.repeat

    ciauz
    Grazie, con questa proprieta' miglioro il funzionamento dello script, che cosi' riconosce se e' una ripetizione... ma qualche volta fa cilecca nel senso che il timer non e' affidabile :master:

    Dovro' controllare il check digit del barcode per sicurezza

    grazie e ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.