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');