嗨,我遇到了变更事件的问题.
通过documntation应该有对象ui.item
通过documntation应该有对象ui.item
After an item was selected; ui.item refers to the selected item. Always triggered after the close event.
但是当我尝试它时,ui.item是未定义的:(当自动完成中的输入与脚本中的数据不匹配时,我想要取消设置s_town_id.
<input id="s_town" type="text" name="s_town" /> <input type="text" id="s_town_id" name="s_town_id" />
$(function() { $("#s_town").autocomplete({ source: function(request,response) { $.ajax({ url: "/_system/_ajax/uiautocomplete.PHP",dataType: "json",data: { name: "s_town",term: request.term },success: function(data) { response($.map(data,function(item) { return { label: item.whisper_name+ " [" + item.zip_code + " / " + item.lup_state + "]",value: item.whisper_name,id: item.whisper_id,zip_code: item.zip_code,lup_state: item.lup_state,stateid: item.stateid } })) } }) },minLength: 2,select: function(event,ui) { $("#s_town_id").val(ui.item.id); },change: function(event,ui) { // ui.item is undefined :( where is the problem? $("#s_town_id").val(ui.item.id); } }); });
解决方法
我找到了测试event.originalEvent.type的解决方案,如果它是meneuselected或者没有,并且在失败后我取消了s_town_id.但任何更好的解决方案仍然很好.
<input id="s_town" type="text" name="s_town" /> <input type="text" id="s_town_id" name="s_town_id" />
$(function() { $("#s_town").autocomplete({ source: function(request,ui) { try { if(event.originalEvent.type != "menuselected") { // Unset ID $("#s_town_id").val(""); } } catch(err){ // unset ID $("#s_town_id").val(""); } } }); });