JQuery UI автозаполнение; minLength: 0 выпуск

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

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

идеи?

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

6 ответов


Проверьте search метод документации:

запускает событие поиска, которое, когда данные доступны, после этого покажут предложения; может использоваться кнопка selectbox-like для открытия предложения при нажатии. Если нет значения аргумент указан, текущий используется значение ввода. можно назвать с пустой строкой и 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"/>

Я понимаю через эксперимент, почему принятый ответ (Я проголосовал) можно считать немного неполным. Я добавил немного намерения сделать 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', '');
});

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

$(function() {
$("input#autocomplete").autocomplete({
        source: "completion.html",
        minLength: 0,
        select: function( event, ui ) {}
    });
});
$("input#autocomplete").focus(function() {
    $(this).autocomplete("search", $(this).val());
});

это действительно работает! Протестировано на IE, FireFox

$("input#autocomplete").autocomplete({
minLength: 0,
source: source,
}).focus(function() {
        setTimeout( "if ($('#input#autocomplete').val().length == 0) $('#input#autocomplete').autocomplete(\"search\", \"\"); ",1);
    });

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

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

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

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

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

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

рабочая демо


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

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