2015-01-29 7 views
0

У меня есть автозаполнение jquery в текстовом поле, и я использую хакерский способ разрешить автозаполнение несколько раз в том же текстовом поле. В принципе, вы можете запятой разделить значение, а затем регулярное выражение будет пытаться сопоставляться с термином только после окончательного значения. Например, я могу иметь собаку, кошку, пи в текстовом поле, а jquery будет автозаполнен для свиньи, потому что я передаю только «пи» на автозаполнение. Единственная проблема с моим подходом заключается в том, что если пользователь нажимает на предложение автозаполнения, все предыдущие данные (собака, кошка) исчезают и заменяются значением автозаполнения «свинья». Любые идеи о том, как можно нажимать на предложения без стирания предыдущих данных?JQuery Autocomplete очищает текстовое поле предыдущих данных?

function filterResults(myList, matcher) { 
        var retGrep = new Array(); 
        for (var i = 0; i < myList.length; i++) { 
         if (matcher.test(myList[i])) { 
          retGrep.push(myList[i]); 
         } 
        } 
        return retGrep; 
       } 
       $("#title").autocomplete({ 
        source: function(request, response) { 
         if(request.term.indexOf(',') != -1){ 
          var re = $.ui.autocomplete.escapeRegex(request.term.substr(request.term.lastIndexOf(',') + 1)); 
         }else{ 
          var re = $.ui.autocomplete.escapeRegex(request.term); 
         } 
          var matcher = new RegExp("^" + re, "i"); 
          var results = filterResults(titleList, matcher); 
          response(results.slice(0, 5)); 

        }, 
        messages: { 
         noResults: '', 
         results: function() {} 
        } 
       }); 
+1

Можете ли вы показать соответствующий код? – mattfetz

+0

Я разместил его ... комментариев нет .. давай .... – KodeDawg

+0

На самом деле, мы не получаем предупреждения об изменении, поэтому его легко пропустить. Вот почему вы хотите, чтобы вся информация была в вопросе с самого начала, чтобы вы могли получить максимум от нашей помощи. – mattfetz

ответ

0

Так что это исправление для вас без необходимости модификации плагина.

http://jsfiddle.net/w4p6s002/1/

$(document).ready(function(){ 
    var buffer =""; 
    function filterResults(myList, matcher) { 
        var retGrep = new Array(); 
        for (var i = 0; i < myList.length; i++) { 
         if (matcher.test(myList[i])) { 
          retGrep.push(myList[i]); 
         } 
        } 
        return retGrep; 
       } 
       $("#title").autocomplete({ 
        source: function(request, response) { 
         if(request.term.indexOf(',') != -1){ 
          var re = $.ui.autocomplete.escapeRegex(request.term.substr(request.term.lastIndexOf(',') + 1)); 
         }else{ 
          var re = $.ui.autocomplete.escapeRegex(request.term); 
         } 
          var matcher = new RegExp("^" + re, "i"); 
          var results = filterResults(["taco","pig","help"], matcher); 
          response(results.slice(0, 5)); 

        }, 
        messages: { 
         noResults: '', 
         results: function() { 

         } 
        }, 
        select: function(event, ui) { 
         buffer = $("#title").val().substring(0,$("#title").val().lastIndexOf(",")+1); 
        }, 
        close: function(event, ui) { 
         $(this).val(buffer + $("#title").val()); 
        } 
       }); 


}); 

Я добавил 2 слушателей событий в коде так, когда происходит отбор он сохраняет строку в буфере перед его изменениями. Затем, когда он изменяется, он добавляет этот текст перед автозаполненным значением.

+0

СПАСИБО! PERFECT – KodeDawg

+0

Sidenote: это не сработает, если вы используете другой разделитель длиннее одного символа ... вам нужно немного изменить функцию выбора. – KodeDawg

+0

Я имею в виду функцию закрытия. – KodeDawg

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