jquery autocomplete удалить выбранный элемент li из выпадающего меню - PullRequest
1 голос
/ 07 июля 2011

Я использую автозаполнение jquery (1.8) для заполнения тегов, как объяснено в http://net.tutsplus.com/tutorials/javascript-ajax/how-to-use-the-jquery-ui-autocomplete-widget/.

Что мне нужно, это после выбора элемента LI из выпадающего меню, этот элемент должен быть удален из списка.

В выбранном разделе автозаполнения я пытался получить текущий LI, используя метод сравнения, такой как

$(this).get(0).tagname //which return undefined 
e.target.id //which return id of textfield to which autocomplete is bound

1 Ответ

3 голосов
/ 08 июля 2011

Предполагая, что вы делаете именно так, как в учебнике, на который вы ссылаетесь:

  1. Перед прикреплением автозаполнения создайте пустой массив для хранения элементов, которые следует игнорировать (var ignored=[];). Вы можете поместить его в глобальную область видимости, чтобы он был доступен где угодно (перед $(function() { ...).
  2. В определении обратного вызова source (который форматирует результаты) замените это

    //process response
    $.each(data, function(i, val){
        suggestions.push(val.name);
    });
    

    с этим:

    //process response
    $.each(data, function(i, val){
        if(ignored.indexOf(val.name) == -1) {
            suggestions.push(val.name);
        }
    });
    
  3. Затем внутри обратного вызова select добавьте значение выбранного элемента в массив ignored:

    ignored.push(ui.item.value)
    
  4. Возможно, вы захотите «игнорировать» элемент, если пользователь нажимает на ссылку для удаления. Внутри определения обработчика удаления в первой строке добавьте:

    var text = $(this).parent().find('a').remove().end().text();
    var position = ignored.indexOf(text);
    if(position != -1) {
        ignored.splice(position, 1);
    }
    // rest of the original code below...
    
...