Особенность сканеров штрих-кода в том, что они обычно выглядят как стандартная клавиатура HID. Поэтому каждый новый отсканированный код эффективно «печатается» после предыдущего. Решение, которое я использовал в прошлом, состоит в том, чтобы увидеть, сколько времени проходит между нажатиями клавиш в этом текстовом поле. Если это более 10 миллисекунд (или около этого значения, я думаю, это было наибольшее время, которое потребовалось сканеру, который я использовал, чтобы «напечатать» весь код), тогда это новый штрих-код, и вы должны удалить все до .
У меня нет IDE, поэтому большинство имен классов / методов, вероятно, далеко, но что-то вроде примера:
DateTime lastKeyPress = DateTime.Now;
void txtBarcode_KeyPress(object sender, KeyPressEventArgs args)
{
if(((TimeSpan) (DateTime.Now - lastKeyPress)).TotalMilliseconds > 10)
{
txtBarcode.Text = "";
}
lastKeyPress = DateTime.Now;
}
Я думаю, что это должно сделать. Это работает, потому что событие KeyPress происходит до добавления символа, поэтому вы можете сначала очистить текстовое поле.
Редактировать : Я полагаю, что для настройки, где бы у вас не было txtBarcode.TextChanged += txtBarcode_TextChanged
, вместо этого у вас есть txtBarcode.KeyPress += txtBarcode_KeyPress
. Проверьте правильность названия события.
Редактировать 2 :
Версия jQuery:
Предполагается, что этот HTML (поскольку вы используете ASP, ваш источник для входного тега будет выглядеть по-другому, но вывод будет по-прежнему иметь атрибут id
, который действительно единственный, который имеет значение):
<form action="" method="post">
<input type="text" name="txtBarcode" id="txtBarcode" />
</form>
Тогда этот javascript работает:
$(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;
});
});
Похоже, что (по крайней мере, в веб-браузере) 50 миллисекунд - это необходимое время между символами. Я проверял это в Firefox, Chrome и IE7.