2012-12-07 51 views
0

我有一个自动完成的用户界面,其中有一个预先定义的用户列表作为源。 当用户从列表中选择一个用户时,它的ID被保存在一个隐藏字段中。到此为止,这很好。现在,如果用户写入的用户名不在自动完成列表中,那么我需要将隐藏字段的值更改为0并执行其他任务。但我无法做到这一点...在Jquery自动完成Ui中搜索文本

我试过使用.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

直到现在http://stackoverflow.com/questions/3299839/jquery-ui-autocomplete-with-hybrid-text-id-search是我接近的唯一的东西(见第一个答案)。但那是另一种方式。 – Ruchan

+0

是那里的一个有效的财产? ui.item.Name? autosuggest默认只包含ui.item.label和ui.item.value。你没有在控制台中发现错误? – chrisvillanueva

+0

没有没有错误的。 .Name是在我的json列表中定义的,所以我使用它。 无论如何,我想出了我的问题。查看下面的答案,如果有任何建议或错误 – Ruchan

回答

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。

0

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

关闭(事件,UI)类型:autocompleteclose

触发时,菜单是隐藏的。并非所有的关闭事件都伴随着变化事件。 事件 类型:事件 UI 类型:Object

代码示例:

初始化与指定的接近回调的自动完成: $( “.selector”).autocomplete({ 接近:function(event,ui){} });

绑定事件侦听器向autocompleteclose事件

$( “.selector”)。在( “autocompleteclose”,功能(事件,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) 
    } 
相关问题