Определить время, необходимое для ввода в поле автозаполнения и автоматически выбирать, если найден только один элемент - PullRequest
0 голосов
/ 11 ноября 2011

Правильно, я почти нашел то, что мне нужно, но не совсем.

Учитывая простой вызов jQUery для Autocomplete

    $(".autoItem").each(function () {
        var id = $(this).attr("id");
        var itemNumber = id.replace('item', '');
        $(this).autocomplete({
            source: "jsonOut/products.aspx",
            minLength: 2,
            select: function (event, ui) {
                $('#price' + itemNumber).val(ui.item.price);
                $('#id' + itemNumber).val(ui.item.id);
            }
        });
    });

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

Это веб-форма для продажи в магазине.Текстовое поле может быть заполнено двумя способами:

A) Просто введите как обычно.
B) Сканирование кода с помощью сканера штрих-кода.

В случае A все в порядке, автозаполнение работает точно так, как задумывалось автозаполнение.

В случае B у меня есть две проблемы:

  1. Iнужно уметь обнаруживать, что эта запись от сканера, чтобы код, который находится за ней, знал, что ищет поле штрих-кода в моей базе данных, а не заголовки элементов.Очевидно, что браузер этого не узнает, поэтому я могу думать только о том, чтобы сделать это по времени.Сканер заполнит поле быстрее, чем кто-либо может напечатать.

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

(сканер штрих-кода имеет терминатор TAB, поэтому после сканирования он сразу размывает текстовое поле и переходит к следующему)

Было бы что-то вроде этоговозможно?

Если бы кто-то мог помочь с проблемой в изоляции, это было бы круто.Я посмотрел на https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.selectFirst.js для точки B, но не смог заставить ее работать.

ПРИМЕЧАНИЕ: Если худшее дошло до худшего, я мог бы обнаружить отсканированные записи, используя isNumeri cв приведенном ниже коде, НО, некоторые коды, которые мы сканируем, не являются числовыми, очевидно, это правильные коды UPC, но у нас есть некоторые элементы со штрих-кодами, сгенерированными из SKU продукта, которые могут быть не числовыми.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Используете ли вы опцию delay для автозаполнения jQueryUI? http://jqueryui.com/demos/autocomplete/#option-delay

Это должно отделить человека от машины и выполнять автозаполнение только для людей.


Насколько это не единичная распродажа ...

Захват события возврата каретки в полях штрих-кода с использованием JavaScript и предотвращения отправки формы путем возврата false.

0 голосов
/ 14 ноября 2011

Право ...

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

В итоге получилось очень просто ... после нескольких часов возни с focus () blur () change () и всеми видами идентификаторов!

@ Тедди, твои советы и ответ в значительной степени сделали это.

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

$('.findProduct').live('keypress', function (e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13) { 
        // call a load function to get details from bar code
    };
});

$('.findProduct').live('focus', function () { findProduct() }); // findProduct is the AutoComplete function

Как вы сказали, @Teddy, функция задержки в AutoComplete гарантирует, что это не повлияет на AutoComplete, как только сканер отправит терминатор Enter, я смогу jQuery вызвать нужные мне данные.

При вводе вручную в поле AutoComplete делает все как обычно.

Итак, следующий совет, как вы думаете, мне следует отключить клавишу Enter после того, как автозаполнение сделало это, чтобы избежать путаницы, и аналогичным образом отключить функцию автозаполнения некоторыми способами (еще не решенными)?

РЕДАКТИРОВАТЬ: я должен сказать, что форма больше не имеет кнопки отправки, отправка будет осуществляться с помощью интерактивного div или изображение или что-то.

...