Автозаполнение пользовательского интерфейса jQuery: никогда не всплывало? - PullRequest
1 голос
/ 24 июля 2011

Можно ли как-то сказать jQuery UI Autocomplete никогда не искать?Я мог бы установить minLength действительно высоко, я полагаю, но есть правильный способ сделать это?

Если вам интересно, я вместо этого вручную запускаю его с помощью события onclick.


Как добавить обработчик onclick:

if(settings.showOnClick) {
    $(this).bind('click.ajaxselect', function(e) {
        if(!$(this).data('focusHandled') && !$(this).autocomplete('widget').is(':visible')) {
            $(this).autocomplete('search','');
            $(this).data('focusHandled',true);
        } else {
            $(this).data('focusHandled',false);
        }
    }).bind('focus.ajaxselect', function(e) {
        if(!$(this).data('focusHandled') && e.hasOwnProperty('originalEvent') && $(this).val() === this.defaultValue && !$(this).autocomplete('widget').is(':visible')) {
            $(this).autocomplete('search','');
            $(this).data('focusHandled',true);
        } else {
            $(this).data('focusHandled',false);
        }
    })
}

Ответы [ 2 ]

1 голос
/ 24 июля 2011

Помещение в обратный вызов search, кажется, делает в основном то, что я хочу:

search: function(e, ui) {
    if(settings.minLength < 0 && e.hasOwnProperty('originalEvent')) return false;
    // other code
    return true;
},

Тогда, если я установлю minLength меньше 0, при наборе событий не будет выполняться поиск, но мое событие щелчка по-прежнему будет срабатывать. События фокуса, похоже, тоже отменяются. Попытка определить, доволен ли я таким поведением или нет.

1 голос
/ 24 июля 2011

Установите minLength на все, что вы хотите (вероятно, 0, так как вы запускаете вручную). Тогда,

$( ".selector" ).autocomplete({
    select: function(event, ui) { 
        ... // do your thing
        $( ".selector" ).autocomplete("disable");
    }
});

$( ".clicker" ).click(function() {
    ... // do your thing
    $( ".selector" ).autocomplete("enable");
});
...