2013-09-10 2 views
7

У меня есть форма, работающая с автозаполнением JQuery, и она работает достаточно хорошо. Теперь мне нужен еще один элемент, чтобы заставить пользователя выбрать правильный выбор на входе автозаполнения. Они могут печатать все, что захотят, и все фильтруется автозаполнением. Но они должны выбрать что-то из обслуживаемого списка. Если они не заполняют поле ввода, оно должно быть пустым. Пробовал несколько вещей с изменением и безрезультатно. Это код моей автозаполнения. Я видел несколько примеров работы с данными вместо источника. Это, кажется, делает большую разницуJQuery Autocomplete - выбор силы

$(function() { 
    $("#sp_name").autocomplete({ 
     minLength: 2, 
     delay: 300, 
     source: function (request, response) { 
      $.ajax({ 
       url: "./Search/", 
       dataType: "json", 
       data: { 
        term: request.term, 
        zoekterm: $("#al").html() 
       }, 
       success: function (data) { 
        response($.map(data, function (item) { 
         return { 
          label: item.naam, 
          value: item.naam 
         } 
        })); 
       } 
      }); 
     } 
    }) 
}); 
+0

вы можете связать 'blur' событие к введенному автозаполнения, в вашем случае' $ ("# sp_name") ', а затем определить, имеет ли он значение perfered или нет – jasonslyvia

+0

Должен ли я сделать это с помощью другого вызова JSON? Или есть какой-то другой умный способ? – Pattux

+0

nope, давайте предположим, что ваш '$ (" # sp_name ")' input ожидает пользователя, чтобы выбрать имя из списка предложений автозаполнения, тогда вы можете привязать событие 'blur' к вашему входу, например' $ («# sp_name»). (function() {if (! this.value) {/ * иметь дело с пользователем, который ничего не выбирает * /}}); – jasonslyvia

ответ

7

Попробуйте это:

Я использую локальный список здесь, но вы можете добиться этого с помощью источника данных JSON тоже. Просто добавьте событие изменения. Единственная проблема, которая может возникнуть в том, что если пользователь не нажмет на предложение, оно станет пустым (даже если пользователь вводит тот же текст, что и предложение). Это будет обязательным для пользователя щелчок по предложению.

var list = ["c", "c++", "c#","Basic","Mongo"]; 

$('#auto').autocomplete({ 
source: list, 

select: function (event, ui) { 
    $(this).val(ui.item ? ui.item : " ");}, 

change: function (event, ui) { 
    if (!ui.item) { 
     this.value = '';} 
//else { Return your label here } 
} 
}); 

JsFidle для него: http://jsfiddle.net/sarcastic/7KdZP/112/

In your case, Change function would be something like this: 

change: function (event, ui) 
{ 
if (!ui.label) { this.value = ''; } 
} 
+0

Работало отлично. Благодарю. – Pattux

+1

Я также слежу за вашим кодом и отлично работаю. Не могли бы вы объяснить, почему существует два параметра 'select' с различной реализацией в автозаполнении и какова их необходимость.? @Sarcastic – Saif

+1

Для кого-то интересно ... если вы включите 'select' дважды, то используется только второй. Первый можно удалить. –

Смежные вопросы