我当前的代码如下所示:
$(document).ready(function () { $('#txtSearchForTrainingFacility').autocomplete({ select: function (event,ui) { searchCallback(event,ui); },// select source: function (request,response) { $.ajax({ url: 'http://localhost:49795/Ajax/Search/' + $('#txtSearchForTrainingFacility').val(),dataType: 'json',data: {},success: function (data) { response( $.map( data,function( item ) { return { label: item.Name,value: item.Value,id: item.ID } // return object })) // response } // success }) // ajax } // source function }); // autocomplete }); // document.ready
你可以看到在ajax.success事件函数中我映射返回一个带有label,value和id属性的对象 – 但是autocomplete.select方法的ui.item参数只包含label和value.
我究竟做错了什么?如何让id属性出现在autocomplete.select的ui.item对象上?
the result of the ajax call is a json array,with each element an object that contains the properties
Name
,Value
,andID
.
注意
如果用固定数组替换ajax调用[{id:1,标签:’bob’,值:’creep’},{id:2,标签:’joe’,值:’朋友’}]那么id属性似乎在选择事件中通过就好了.
解决方法
根据
the jQuery UI 1.8.20 source,项目对象直接存储在< li>中.使用jQuery数据(). jQuery UI中唯一可以在响应回调和对象存储之间更改对象的位置,如数据在
the
_normalize
private function中.如果您传递的对象是字符串,它将仅显式保留标签和值,但是否则即使是_normalize函数也应保持对象的完整性.
这个,以及传递静态数组解决了您的问题这一事实让我相信您的问题在于来自您的服务器的JSON,而不是您发布的JavaScript代码段.您的代码假定您的ASP.NET服务器的默认ID字段;可能值得仔细检查以确保您仍然将该字段名称作为默认值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。