2012-02-08 4 views
2

Я связываю автозаполнение jQuery-ui с несколькими элементами на моей странице, так как я хочу иметь автозаполнение с помощью тот же набор опций в разных полях. Что-то вроде:jQuery-ui/auto-complete/getJSON - как передать идентификатор элемента во внешний PHP

<input class='myclass' id='myid1' name='field1' type='text' /> 
<input class='myclass' id='myid2' name='field2' type='text' /> 
<input class='myclass' id='myid3' name='field3' type='text' /> 

Я использую "Multiple Remote" вариант из JQuery-UI автозаполнения, так что Javascript выглядит примерно так:

$(".myclass") 
    // don't navigate away from the field on tab when selecting an item 
     // don't navigate away from the field on tab when selecting an item 
     .bind("keydown", function(event) { 
      if (event.keyCode === $.ui.keyCode.TAB && 
       $(this).data("autocomplete").menu.active) { 
       event.preventDefault(); 
      } 
     }) 
     .autocomplete({ 
      source: function(request, response) { 
       $.getJSON("search.php" 
         ,{ term:extractLast(request.term) } 
         ,response); 
      }, 
      search: function() { 
       // custom minLength 
       var term = extractLast(this.value); 
       if (term.length < 1) { 
        return false; 
       } 
      }, 
      focus: function() { 
       // prevent value inserted on focus 
       return false; 
      }, 
      select: function(event, ui) { 
       var terms = split(this.value); 
       // remove the current input 
       terms.pop(); 
       // add the selected item 
       terms.push(ui.item.value); 
       // add placeholder to get the comma-and-space at the end 
       terms.push(""); 
       this.value = terms.join(", "); 
       return false; 
      } 
     }); 

Это все работает очень хорошо. Но я хочу передать id как второй параметр getJSON. Как я могу это сделать?

Я знаю, как добавить второй параметр в заявлении $ .getJSON, но я не в состоянии захватить «идентификатор» триггера событий. Я попробовал $ (это) .attr ('id'), но он дал мне undefined. Какие-либо предложения?

Спасибо.

ответ

4

Помните, что this в обратном вызове «источник» является экземпляром плагина, а не элементом INPUT.

Ссылка на INPUT фактически сохраняется в экземпляре плагина в свойстве «element».
Делают это так:

source: function(request, response) { 
    var inputID = this.element.attr('id'); 
    $.getJSON("search.php" 
     ,{ term:extractLast(request.term), id: inputID } 
     ,response); 
}, 

DEMO

+0

Он отлично работает. большое спасибо –