0

我試圖從jQueryUI中使用自動完成功能。我需要對後端進行數據調用,但除了request.term的值以外,還有其他參數需要傳遞,因此,如果傳遞附加數據,而不是使用其他方法,則我想使用data-屬性做到這一點。jQuery自動完成+數據屬性在結果中返回uiAutocomplete

var input = $(document.createElement("input")); 
mydata.each(function() { 
    input.attr('data-'+this.nodeName, this.innerHTML); 
}); 

所以當我建立我的<input>我也把在裏面data-屬性的早午餐,這個想法是,當我需要做的自動完成呼叫,我應該能夠只是input.data()搶我需要的一切。

但是,我從jQuery的.data()調用中收到了一些奇怪的行爲。

input.autocomplete({ 
    source: function(req, resp) { 
     $.ajax({ 
      url: $(this.element).attr('action'), 
      dataType : 'json', 
      data: $(this.element).data(), 
      cache : false 
     }).done(function(resp) { 
      console.log(resp); 
     }).fail(function() { 
      alert("failed"); 
     }); 
    }, 
    ... 

在上面的代碼,當我這樣做$(this.element).data(),它確實返回我所有的我定義的屬性,但它也包括別的東西,比如uiAutocomplete對象...

我想呼叫.data應該只返回前綴爲data-的項目?獲取data-屬性的最佳方法是什麼?

回答

-1

以我觀察數據的方法正在返回)設定值

$(".autoCompleteInput").data("attribute1", "value1"); 
    $(".autoCompleteInput").data("attribute2", "value2"); 
    $(".autoCompleteInput").data("attribute3", 4); 
    $(".autoCompleteInput").data("attribute4", 5); 

2設置如下 1的值)獲取分配值與其它控制的值

var datas = $(".autoCompleteInput").data(); 

3)

var stringData = JSON.stringify(datas); 
    $(".DataDisplay").val(stringData); 

http://api.jquery.com/data/

創建自動完成樣本

1)創建另一個頁面,該頁面返回用於自動完成的值的字符串。 2)發出一個Ajax請求並將這些值檢索到本地數組中。 3)使用值的數組來填充自動完成。

4)incase的一些小部件確保你包括必要的jQuery庫和一些相關的css到你的頁面。

$(document).ready(function() { 

    $.ajax({ 
     url: "AutoCompleteDataProvider.cshtml", 

     success: function (data) { 

      var autoCompleteValue = data.split(','); 
      $(".autoCompleteInput").autocomplete({ 
       source: autoCompleteValue 
      }); 
     }, 
     error: function (textStatus) { 
      alert(textStatus); 
     } 

     }); 

}); 
+0

我的問題是,'。數據()'將返回一個額外的對象'uiAutocomplete',它不應該是。我沒有要求提供關於如何進行自動完成的示例。 – codenamezero

0

這是因爲jQuery使用data屬性來存儲插件命名空間在它的數據,它使用了更多的插件,更多的數據的命名空間,你會得到。這並不奇怪,這是jQuery的工作原理。正如這裏所說 -

調用jQuery.data(元素)將所有元素的 關聯的值作爲JavaScript對象進行檢索。請注意,jQuery本身使用 這種方法來存儲供內部使用的數據,例如事件處理程序,因此 不會假定它僅包含您自己的代碼存儲的數據,而您的代碼只有 。

參考: https://api.jquery.com/jQuery.data/

至於你的解決方案,您應該如果您希望再取回命名空間數據。喜歡的東西 -

input.data('mydata', {name:'test'}); 

,然後得到它 -

var data = input.data('mydata');