我正在使用带有 Knockout JS 模板/JQuery 的自动完成组合框中提供的自定义绑定
我需要强制用户必须在自动完成列表中选择一个值,并且在他们选择该值后不能向选择添加其他文本。我已经搜索过,但找不到如何防止输入其他文本的示例。它必须保持可编辑,以防他们选择了错误的下拉菜单,但他们输入的内容必须 100% 与列表中的值匹配。
我在 jquery 上找到了这个帖子,但它已经 9 个月大了,没有人发布答案。
我正在使用带有 Knockout JS 模板/JQuery 的自动完成组合框中提供的自定义绑定
我需要强制用户必须在自动完成列表中选择一个值,并且在他们选择该值后不能向选择添加其他文本。我已经搜索过,但找不到如何防止输入其他文本的示例。它必须保持可编辑,以防他们选择了错误的下拉菜单,但他们输入的内容必须 100% 与列表中的值匹配。
我在 jquery 上找到了这个帖子,但它已经 9 个月大了,没有人发布答案。
没有内置功能可以做你想做的事。
我做了一个简单的项目,使用自动完成change
事件,您必须从自动完成中选择值,如果不是,则删除该值。
更改事件
如果值已更改,则在字段模糊时触发。
选择后,该字段被禁用,您可以使用激活锚激活它(例如)。
代码:
$("#artist").autocomplete({
source: function (request, response) {
$.ajax({
url: "http://en.wikipedia.org/w/api.php",
dataType: "jsonp",
data: {
'action': "opensearch",
'format': "json",
'search': request.term
},
success: function (data) {
response(data[1]);
}
});
},
change: function (event, ui) {
if (ui.item == null || ui.item == undefined) {
$("#artist").val("");
$("#artist").attr("disabled", false);
} else {
$("#artist").attr("disabled", true);
}
}
});
$('#changeArtist').click(function (e) {
e.preventDefault();
$("#artist").attr("disabled", false);
});
这是一个小提琴:http: //jsfiddle.net/IrvinDominin/nH4Nx/
这是一篇较旧的帖子,但我认为从用户体验的角度来看,由于焦点问题,它有点不完整(直到焦点从输入中移除后才会进行更改,在这种情况下是“#artist”,相当烦人),所以我要补充:
select: function (event, ui) {
$("#artist").attr("disabled", false);
}
所以(假设它是我们试图启用的按钮)用户在选择后立即看到启用的对象。