jquery-ui自动完成,操纵json和javascript来解析隐藏的输入字段?

我们使用jquery自动完成function创建了一个搜索表单,我们想要修改它的工作原理。

好的,所以这是我的json回复:

[{"id":"Liverpool","postcode":"2170","state":"NSW","value":"Liverpool, NSW (2170)"}] 

这是我们的javascript:

 $(function() { function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split(term).pop(); } $( "#suburbs" ) // 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( "http://www.path-to-our-autocomplete.com/search.php", { term: extractLast( request.term ) }, response ); }, search: function() { // custom minLength var term = extractLast( this.value ); if ( term.length < 2 ) { 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; } }); }); 

我们的HTML:

    

基本上我们想要做的是,当点击搜索结果时,它目前用"Liverpool, NSW (2170)"填充郊区输入框 – 因为这是json返回的值。

我们想要改变的是,我们希望下拉显示这个结果,但是当点击时,我们希望它用json值“id”填充郊区输入字段 – 换句话说,只需用“利物浦”填充郊区输入”。

我们希望它将隐藏的输入框邮政编码值填充为jsons“postcode”引用,并为状态隐藏输入框填充相同内容。

我们如何操纵这个javascript来做到这一点? 我们已经阅读并尝试了几天,但没有设法得到任何地方,所以我决定在这里发布堆栈。

谢谢 :)

根据文档(http://jqueryui.com/demos/autocomplete/):

本地数据可以是一个简单的字符串数组,也可以包含数组中每个项目的对象,带有标签或值属性或两者。 label属性显示在建议菜单中。 用户从菜单中选择了某些内容后,该值将插入到input元素中。 如果仅指定了一个属性,则它将用于两者,例如。 如果仅提供value-properties,则该值也将用作标签。

所以:像这样修改你的JSON:

 [{"value":"Liverpool","postcode":"2170","state":"NSW","label":"Liverpool, NSW (2170)"}]; 

你的选择函数是这样的:

 select: function( event, ui ) { if (ui.item) { $('#postcode').val(ui.item.postcode); $('#state').val(ui.item.state); } else { $('#postcode').val(''); $('#state').val(''); } }