выбор jQuery AutoComplete, стреляющий после изменения?

Я использую управление jQuery UI AutoComplete (просто обновленный к jQuery UI 1.8.1). Каждый раз, когда пользователь оставляет текстовое поле, я хочу установить содержание текстового поля к известному - хорошее значение и установить скрытое поле ID для значения, которое было выбрано. Кроме того, я хочу, чтобы страница отправила назад, когда содержание текстового поля изменяется.

В настоящее время я реализую, это при наличии события выбора автоматического заполнения установило скрытый идентификатор и затем событие изменения на текстовом поле, которое устанавливает значение текстового поля и, при необходимости, вызывает сообщение назад.

Если пользователь просто использует клавиатуру, это работает отлично. Можно ввести, использовать стрелки вверх и вниз для выбора значения и затем вкладки для выхода. Избранные огни события, идентификатор установлен и затем огни события изменения и сообщения страницы назад.

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

Существует ли способ заставить событие изменения не стрелять до окончания избранного события, даже когда мышь используется?

$(function() {
    var txtAutoComp_cache = {};
    var txtAutoComp_current = { label: $('#txtAutoComp').val(), id: $('#hiddenAutoComp_ID').val() };
    $('#txtAutoComp').change(function() {
        if (this.value == '') { txtAutoComp_current = null; }
        if (txtAutoComp_current) {
            this.value = txtAutoComp_current.label ? txtAutoComp_current.label : txtAutoComp_current;
            $('#hiddenAutoComp_ID').val(txtAutoComp_current.id ? txtAutoComp_current.id : txtAutoComp_current);
        } else {
            this.value = '';
            $('#hiddenAutoComp_ID').val('');
        }
        // Postback goes here
    });
    $('#txtAutoComp').autocomplete({
        source: function(request, response) {
            var jsonReq = '{ "prefixText": "' + request.term.replace('\\', '\\\\').replace('"', '\\"') + '", "count": 0 }';
            if (txtAutoComp_cache.req == jsonReq && txtAutoComp_cache.content) {
                response(txtAutoComp_cache.content);
                return;
            }
            $.ajax({
                url: 'ajaxLookup.asmx/CatLookup',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                data: jsonReq,
                type: 'POST',
                success: function(data) {
                    txtAutoComp_cache.req = jsonReq;
                    txtAutoComp_cache.content = data.d;
                    response(data.d);
                    if (data.d && data.d[0]) { txtAutoComp_current = data.d[0]; }
                }
            });
        },
        select: function(event, ui) {
            if (ui.item) { txtAutoComp_current = ui.item; }
            $('#hiddenAutoComp_ID').val(ui.item ? ui.item.id : '');
        }
    });
});

5
задан Zarigani 19 May 2010 в 23:15
поделиться

1 ответ

Я не знаю, как предотвратить срабатывание события change, но вы можете легко добавить некоторые условные обозначения в событие изменения, которые убедятся, что скрытое поле установлено и что TextBox в настоящее время имеет значение a.

0
ответ дан 15 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

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