Автозаполнение JQuery UI; minLength: 0 выпуск - PullRequest
37 голосов
/ 05 января 2011

Я использую автозаполнение JQuery UI. Я указываю минимальную длину. Если я укажу minLength:2, мне нужно набрать 2 символа, прежде чем служба сработает. Если я укажу minLength:1, мне нужно будет набрать только один символ, прежде чем сработает исходная служба.

Однако, когда я указываю minLength:0, мне все равно нужно набрать один символ. Так какой смысл 0? чем он отличается от 1? Ожидаемое и желаемое поведение будет для него срабатывать, как только ввод имеет фокус ...?

Идеи

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

Ответы [ 7 ]

54 голосов
/ 05 января 2011

Ознакомьтесь с документацией метода search:

Запускает событие поиска, которое при наличии данных отображает предложения;может использоваться кнопкой, подобной selectbox, чтобы открывать предложения при нажатии.Если аргумент значения не указан, используется текущее значение ввода. Может вызываться с пустой строкой и minLength: 0 для отображения всех элементов.

var source = ['One', 'Two', 'Three', 'Four'];

var firstVal = source[0];

$("input#autocomplete").autocomplete({
    minLength: 0,
    source: source,
}).focus(function() {
    $(this).autocomplete("search", $(this).val());
});
.ui-menu-item{
  background : rgb(215, 215, 215);;  
  border : 1px solid white;
  list-style-type: none;
  cursor : pointer;
}

.ui-menu-item:hover{
  background : rgb(200, 200, 200);
}


.ui-autocomplete{
   padding-left:0;
   margin-top  : 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.js"></script>
<input id="autocomplete"/>&nbsp;<input id="submit" type="submit"/>
6 голосов
/ 09 мая 2012

Я экспериментально понимаю, почему принятый ответ (я проголосовал) можно считать слегка неполным. Я добавил немного намерения сделать UX более комбо-подобным:

$('#Carrier').autocomplete(
{
    source: '@Url.Action("AutocompleteCarrier", "Client")',
    minLength: 0,
    select: function (event, data) {
        $(this).autocomplete('disable');
    }
})
.blur(function(){
    $(this).autocomplete('enable');
})
.focus(function () {
    $(this).autocomplete('search', '');
});
3 голосов
/ 05 января 2012

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

$(function() {
$("input#autocomplete").autocomplete({
        source: "completion.html",
        minLength: 0,
        select: function( event, ui ) {}
    });
});
$("input#autocomplete").focus(function() {
    $(this).autocomplete("search", $(this).val());
});
1 голос
/ 14 августа 2012

У меня была такая же проблема, и я понял, как ее обойти.

Проблема в том, что при выборе опции вход будет сфокусирован, он будет запускаться search без фильтра и снова покажет autocomplete.

Эта проблема не возникает при выборе с клавиатуры, поскольку input уже находится в фокусе, поэтому код, который находится внутри focus, будетне запускать снова.

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

jQuery("input#autocomplete").focus(function(e) {
    if(!e.isTrigger) {
        jQuery(this).autocomplete("search", "");
    }
    e.stopPropagation();
});

e.isTrigger используется jQuery чтобы определить, когда event был запущен автоматически или пользователем.

рабочая демонстрация

1 голос
/ 01 марта 2012

Это на самом деле работает! Протестировано на IE, FireFox

$("input#autocomplete").autocomplete({
minLength: 0,
source: source,
}).focus(function() {
        setTimeout( "if ($('#input#autocomplete').val().length == 0) $('#input#autocomplete').autocomplete(\"search\", \"\"); ",1);
    });
0 голосов
/ 22 декабря 2018

Я знаю, что это очень старая тема, но у меня точно такая же проблема, и ни одно из представленных выше решений, похоже, не работает ... Я предполагаю, что это из-за обновлений в Jquery? Если бы кто-то мог опубликовать рабочий обновленный пример (например, jquery-1.12.4.js // 1.12.1 / jquery-ui.js), это было бы замечательно.

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

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

Я не знаю, как мы могли бы это исправить, но дайте мне знать, если кто-то из вас сталкивался с подобной проблемой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...