从the comment in this question开始,我已经看到如果没有选择列表中的元素,如何将自动填充字段设置为空。
我想要实现的是,当用户没有从自动完成列表中选择任何元素并切换到下一个字段时,应该发生以下情况之一:
这是我的代码:
var cities = //function that provides a list of cities depending on the input string (edited to clarify)
$('.autocomplete-city').autocomplete({
source: function (request, response) {
response($.map(cities( request.term ), function (value, key) {
return {
label: value.label,
value: value.value
}
}));
},
// manage what happens if user does not click any option from autocomplete
change: function(event, ui){
if (ui.item == null){
if ( list_from_autocomplete == null ){ // I tried here several possibilities but none seem to work
$(this).val('');
$(this).focus();
} else {
$(this).val( first_item_in_list ); // Despite the existing questions, I could not make it work...
}
}
},
minLength: 2,
autoFocus: true,
});
怎么可以这样做?
答案 0 :(得分:1)
您可以搜索包含用户输入的所有城市,如果只获得一个结果,请将其放入自动填充中。
1)因此,在更改事件中,您可以检查用户是否选择了一个项目:
change: function(event, ui){
if(ui.item){
//user select an item
}
else{
//here let's try to set the autocomplete
}
2)搜索包含用户输入的城市:
var result = cities.filter(function( obj ) {
return obj.label.indexOf(searched);
});
3)最后,如果您只得到一个结果,请使用该值设置自动完成:
if(result.length==1){
$(this).val(result[0].label);
}
请参阅以下代码段:
var cities = [
{"label":"Alessandria","id":"AL"},
{"label":"Milano","id":"MI"},
{"label":"Pisa","id":"PI"},
{"label":"Pistoia","id":"PT"}
];
$(".autocomplete-city").autocomplete({
source: cities,
select: function(event, ui){
if(ui.item){
console.log('select', ui.item.label);
return ui.item.label;
}
else{
console.log('select with null value');
}
},
change: function(event, ui){
var searched = this.value;
console.log("Searched: " + searched);
if(ui.item){
console.log('change', ui.item.id);
}
else{
console.log('change with null value');
var result = cities.filter(function( obj ) {
return obj.label.toLowerCase().indexOf(searched.toLowerCase()) !== -1;
});
if(result.length>0){
$(this).val(result[0].label);
}
else{
//clear the autocomplete
$(this).val("");
}
}
}
});
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<input class="autocomplete-city"/>
在上面的例子中有以下城市:亚历山德里亚,米兰,比萨,皮斯托亚。
我希望很清楚,再见。
<强>更新强>
为了在用户离开自动填充而不选择任何城市时获得第一个结果,您可以检查result.length>0
并将结果中的第一个值设置为自动完成:
var result = cities.filter(function( obj ) {
return obj.label.toLowerCase().indexOf(searched.toLowerCase()) !== -1;
});
if(result.length>0){
$(this).val(result[0].label);
}
else{
//clear the autocomplete
$(this).val("");
}