在Jquery AutoComplete Ui中搜索文本

时间:2012-12-07 06:08:20

标签: jquery jquery-autocomplete

我有一个自动完成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的值和警报因此而产生异常。

2 个答案:

答案 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。