2012-12-07 55 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) 
    } 
相關問題