我有一个自动完成ui,其中有一个预定义的用户列表作为源。 当用户从列表中选择用户时,它的id将保存在隐藏字段中。到这里很好。现在,如果用户写入的用户名不在自动完成列表中,那么我需要将隐藏字段的值更改为0并执行其他任务。但我无法做到这一点......
我尝试使用.change事件,但它不起作用。 这是代码。
$.ajax({
type: "POST",
url: "CHService.asmx/GetClient",
dataType: "json",
data: "{}",
contentType: "application/json; charset=utf-8",
success: function (data) {
$('#txtName').autocomplete({
minLength: 0,
source: function (req, responseFn) {
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp("^" + re, "i");
var a = $.grep(data.d, function (item, index) {
return matcher.test(item.value);
});
responseFn(a);
}, //Searches user input with first letter of ...//data.d
select: function (event, ui) {
$('#txtName').val(ui.item.value);
$('#HFuser').val(ui.item.Name);
alert('Select' + ui.item.Name);
//return false;
},
change: function (event, ui) {
alert('Change' + ui.item.Name);
if (ui.item == null) {
$('#HFuser').val(0);
//return false;
}
}
});
那么,基本上我需要的是,当用户从自动填充中选择值时设置UserId
,或者在用户输入新值时设置userid=0
。
UPDATE
忘记添加,.change事件不起作用,因为每次ui.item==null is true
的值和警报因此而产生异常。
答案 0 :(得分:0)
如果要在自定义用户列表中找不到当前输入字符串时,如果要操作隐藏输入,则可能需要使用autosuggest.close方法。如果输入字符串没有匹配项,建议菜单将关闭。以下是有关“关闭”方法的更多信息:
close(event,ui)类型:autocompleteclose
隐藏菜单时触发。并非每个近距离活动都会伴随着变化事件。 事件 类型:事件 UI 类型:对象
代码示例:
使用指定的close回调初始化自动完成: $(“。selector”)。autocomplete({ close:function(event,ui){} });
将事件侦听器绑定到autocompleteclose事件:
$(“。selector”)。on(“autocompleteclose”,function(event,ui){});
来源:enter link description here
所以改变这个:
change: function (event, ui) {
alert('Change' + ui.item.Name);
if (ui.item == null) {
$('#HFuser').val(0);
//return false;
}
}
要:
close: function (event, ui) {
$('#HFuser').val(0)
}
答案 1 :(得分:0)
猜猜是什么,一点点调整,我自己在朋友的帮助下做到了。
这是代码。这是.change
事件。
var found = false;
for (var i = 0; i < data.d.length; i++) {
if ($("#txtName").val() == data.d[i].value) {
found = true;
break;
}
}
if (found == false) {
$('#HFUserID').val(0);
}
我通过我的data
逐个搜索,未找到时清除了用户ID。