0

我有一个自动完成用户界面,其中有一个预定义的用户列表作为源。当用户从列表中选择一个用户时,它的 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和警报都会因此而出现异常。

4

2 回答 2

0

如果您想在 autosuggest 在您定义的用户列表中找不到当前输入字符串的情况下操作隐藏的输入,您可能需要使用 autosuggest.close 方法。如果输入字符串没有匹配项,建议菜单将关闭。以下是有关“关闭”方法的更多信息:

关闭(事件,用户界面)类型:自动完成关闭

隐藏菜单时触发。并非每个关闭事件都会伴随着更改事件。事件类型:事件 ui 类型:对象

代码示例:

使用指定的关闭回调初始化自动完成: $( ".selector" ).autocomplete({ close: function( event, ui ) {} });

将事件侦听器绑定到 autocompleteclose 事件

$( ".selector" ).on( "autocompleteclose", function( event, ui ) {} );

来源:在此处输入链接描述

所以改变这个:

 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)
  }
于 2012-12-07T06:37:05.200 回答
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。

于 2012-12-07T07:00:00.803 回答