Я использую Сканер (базовая модель) для сканирования штрихкода. Просканированный штрихкод будет получен в текстовом поле. В txtBarcode_TextChanged событии я получаю штрихкод к доступу.
Проблема:
Если я нажал сканер несколько раз, штрихкод добирается, добавляют с предыдущим значением.
Код:
protected void txtBarcode_TextChanged(object sender, EventArgs e)
{
string txt = this.txtBarcode.Text;
this.txtBarcode.Text = string.Empty;
}
Сканеры штрих-кода обычно выглядят как стандартная 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, ваш источник входного тега будет выглядеть иначе, но выходные данные все равно будут иметь идентификатор
, который на самом деле является единственным, что имеет значение):
<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.
попробуйте изменить обработчик события TextChanged на такой:
txtBarcode.SelectionStart = 0;
txtBarcode.SelectionLength = txtBarcode.Text.Length;
Он выберет текст в текстовом поле после чтения кода и перезапишет его при другом чтении. + пользователям будет удобнее скопировать или изменить вручную
Если вы присваиваете txtBarcode.value += barcode
, измените его на txtBarcode.value = barcode