Просканированное значение (использующий сканер) в текстовом поле

Я использую Сканер (базовая модель) для сканирования штрихкода. Просканированный штрихкод будет получен в текстовом поле. В txtBarcode_TextChanged событии я получаю штрихкод к доступу.

Проблема:

Если я нажал сканер несколько раз, штрихкод добирается, добавляют с предыдущим значением.

Код:

 protected void txtBarcode_TextChanged(object sender, EventArgs e)
    {
        string txt = this.txtBarcode.Text;
        this.txtBarcode.Text = string.Empty;
    }
11
задан Geeth 24 May 2010 в 08:07
поделиться

3 ответа

Сканеры штрих-кода обычно выглядят как стандартная 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.

9
ответ дан 3 December 2019 в 09:19
поделиться

попробуйте изменить обработчик события TextChanged на такой:

txtBarcode.SelectionStart = 0;  
txtBarcode.SelectionLength = txtBarcode.Text.Length;


Он выберет текст в текстовом поле после чтения кода и перезапишет его при другом чтении. + пользователям будет удобнее скопировать или изменить вручную

2
ответ дан 3 December 2019 в 09:19
поделиться

Если вы присваиваете txtBarcode.value += barcode, измените его на txtBarcode.value = barcode

-1
ответ дан 3 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: