Отсканируйте штрих-код внутри текстового поля и активируйте текстовое полеChanged asp.net

У меня есть текстовое поле внутри панели обновления:

<asp:TextBox ID="txtInsert" 
             runat="server" Font-Size="Large" MaxLength="13" 
             Width="150px" onkeyup="doPostBack(this);" AutoPostBack="True"
             OnTextChanged="txtInsert_TextChanged"></asp:TextBox>

и это текстовое поле должно получить значение от сканирования штрих-кода. Все штрих-коды состоят из 13 цифр. в методе txtInsert_TextChanged я проверяю, отсканировано ли значение внутри таблицы, и отображаю сообщение, и удаляю значение текстового поля.

Проблема в том, что иногда он считывает только 1 символ или 4 символа, иногда у меня есть 13 цифр, но они состоят из двух штрих-кодов.

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

и кстати: метод doPostBack(this) находится здесь:

<script type="text/javascript">
    function doPostBack(o) {
        __doPostBack(o.id, '');
    }
</script>

Есть идеи ?

PS: сканер не выдает ENTER в конце...


person Nathan    schedule 04.04.2013    source источник


Ответы (3)


Поскольку ваш считыватель штрих-кода находится на клиентском компьютере, когда вы вызываете __dopostback, браузер снова загружает ту же страницу, и в это время все события клавиатуры, имитируемые считывателем штрих-кода, не передаются в текстовое поле.

Поэтому вам нужно выполнять обратную передачу только тогда, когда в вашем текстовом поле есть 13 символов.

Вы можете изменить свой javascript, чтобы сделать что-то вроде этого: (не настоящий javascript)

if (this.value.length == 13) __dopostback(this);
person ppetrov    schedule 04.04.2013
comment
я получаю сообщение об ошибке, что он не распознает getLength (). - person Nathan; 05.04.2013
comment
вот почему я написал не настоящий javascript. Я написал здесь только общую идею, не помню точный синтаксис, который нужно использовать для получения длины поля ввода в javascript. - person ppetrov; 05.04.2013
comment
хорошо, проверил в Интернете, и кажется, вам просто нужно использовать this.value.length stackoverflow.com/questions/2825144/ - person ppetrov; 05.04.2013
comment
Это сработало для меня... if ($(#‹%=txtInsert.ClientID %›).val().length == 13) { __doPostBack(o.id, ''); } Спасибо чувак... - person Nathan; 05.04.2013
comment
Пожалуйста ;)! И спасибо, что напомнили мне, как получить длину текста поля ввода :) (это было совершенно не в моей голове...) - person ppetrov; 05.04.2013

Событие textchanged сработает при изменении свойства text, поэтому изменение одного символа вызовет событие.

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

В противном случае внутри обработчика событий вы можете просто проверить размер текста и работать с ним только тогда, когда это правильное количество символов.

person Clint    schedule 04.04.2013

Сканер, вероятно, выдаст Enter после того, как прочитает весь код. Поместите кнопку отправки рядом с ним или захватить ключ 13.

person CodeCaster    schedule 04.04.2013
comment
этот сканер не выдает ENTER .. я проверил - person Nathan; 05.04.2013