La cosa con gli scanner di codici a barre è che di solito si presentano come una tastiera HID standard. Pertanto, ogni nuovo codice scansionato viene effettivamente 'digitato' dopo quello precedente. Una soluzione che ho usato in passato è vedere quanto tempo passa tra i tasti premuti in quella casella di testo. Se è più di 10 millisecondi (o attorno a quel valore, credo che questa sia stata la quantità di tempo più lunga per lo scanner che stavo usando per "digitare" un intero codice), quindi è un nuovo codice a barre, e dovresti eliminare tutto prima di esso .
non ho un IDE a portata di mano, quindi la maggior parte dei nomi di classe/metodo sono probabilmente lontano, ma qualcosa di simile un esempio:
DateTime lastKeyPress = DateTime.Now;
void txtBarcode_KeyPress(object sender, KeyPressEventArgs args)
{
if(((TimeSpan) (DateTime.Now - lastKeyPress)).TotalMilliseconds > 10)
{
txtBarcode.Text = "";
}
lastKeyPress = DateTime.Now;
}
penso che dovrebbe farlo. Funziona perché l'evento KeyPress si verifica prima che il personaggio venga aggiunto, quindi è possibile cancellare prima la casella di testo.
Modifica: Per impostare, immagino che ovunque ci sia txtBarcode.TextChanged += txtBarcode_TextChanged
, voi invece avere un txtBarcode.KeyPress += txtBarcode_KeyPress
. Controlla il nome dell'evento è giusto però.
Edit 2:
jQuery Versione:
Assumendo questo HTML (dal momento che si sta utilizzando ASP, la vostra fonte per il tag input avrà un aspetto diverso, ma l'uscita avrà ancora la id
attributo, che in realtà è l'unico che conta):
<form action="" method="post">
<input type="text" name="txtBarcode" id="txtBarcode" />
</form>
Allora questo javascript funziona:
$(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;
});
});
Sembra che (almeno in un browser Web) 50 millisecondi è il tempo necessario per consentire tra i caratteri. Ho provato questo in Firefox, Chrome e IE7.
Questa è una domanda perfettamente valida, forse l'inglese non è perfetto, ma quello che vuole è chiaro. – Kazar