2012-02-08 42 views
2

我將jQuery-ui自動完成綁定到我的頁面中的多個元素,因爲我希望自動完成在不同領域的相同選項集。喜歡的東西:jQuery-ui/auto-complete/getJSON - 如何將元素的id傳遞給外部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' /> 

我使用的是從jQuery的用戶界面自動完成「多遠程」選項,這樣的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說法,但我不能夠搶「ID」事件觸發的。我試過$(this).attr('id'),但它給了我undefined。有什麼建議麼?

謝謝。

回答

4

請注意,「源」回調中的this是插件的實例,而不是INPUT元素。

對INPUT的引用實際上保存在插件實例的「元素」屬性中。
像這樣做:

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

DEMO

+0

它完美。非常感謝你 – 2012-02-08 20:08:25

相關問題