2014-09-06 110 views
0

我有一個與自動完成插件關聯的asp.net文本框。因此,我有一個擴展插件autoSelect匹配元素時,用戶,而不是選擇,只是按下製表鍵(模糊)。以下是該代碼。問題是,第一次模糊事件調用正確,整個功能工作得很好。但第二次,它根本不起作用,它只需要第一個元素的值。登錄到ASP.NET應用程序後Response.Redirect無法正常工作

在我的情況是這樣的情況。我有一個文本框和一個添加按鈕。該文本框具有自動完成功能,我輸入gram並填充所有單位。由於gram是數據源中的單位之一,因此按Tab鍵將接受該選項,並且當按下按鈕時,文本克及其相應的ID將添加到網格視圖中。然後文本框將變爲空白以添加更多這樣的條目。問題是,第二次當我輸入與自動建議菜單項相匹配的內容並按Tab按鈕時,模糊事件不會觸發。

$(".ui-autocomplete-input").on("blur", function (event) { 
       debugger; 
       if ($(this)[0].id == $("#MainContent_TabContainer1_TabpanelNormal_textinput")[0].id) { 
        $.ajax({ 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         url: "./AddRecipe.aspx/CheckIfRecipeTitleExists", 
         data: "{'title':'" + $('#' + 'MainContent_TabContainer1_TabpanelNormal_textinput').val() + "'}", 
         dataType: "text", 
         success: function (data) { 
          var oData = JSON.parse(data); 
          if (oData.d == "True") { 
           var textvalue = $('#MainContent_TabContainer1_TabpanelNormal_textinput').val(); 
           alert("Recipe title " + textvalue + " already exists in our database. Please choose another title."); 
           $('#MainContent_TabContainer1_TabpanelNormal_textinput').val(""); 
           $('#MainContent_TabContainer1_TabpanelNormal_textinput').focus(); 
          } 
         } 
        }); 
       } 
       var autocomplete = $(this).data("autocomplete"); 
       if (autocomplete.selectedItem) { return; } 
       var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"); 
       autocomplete.widget().children(".ui-menu-item").each(function() { 
        var item = $(this).data("item.autocomplete"); 
        if (matcher.test(item.label || item.value || item)) { 
         autocomplete.selectedItem = item; 
         return false; 
        } 
       }); 
       if (autocomplete.selectedItem) { 
        autocomplete._trigger("select", event, { item: autocomplete.selectedItem }); 
       } 
      }); 

請幫我理解爲什麼第二次不開火。

+0

一個以HTML爲例的最簡單的例子,在JSFiddle中,對於像這樣的問題會很有用 – 2014-09-06 07:05:18

回答

0

沒有一個完整的例子,我只能基於描述的行爲進行猜測。

嘗試使用委派事件模糊代替:

$(document).on('blur', ".ui-autocomplete-input", function (event) { 

這將運行事件冒泡後jQuery選擇非改變祖先元素,然後應用選擇器,然後將該函數應用於任何匹配導致事件的元素。這適用於動態更改DOM元素,所以可以解決您的問題。

+0

代碼非常大,我需要包含許多要顯示在提琴手上的東西。我一定會嘗試設置一些東西在小提琴手上展示它。那個時候問題很簡單。註冊模糊事件處理函數,爲什麼它只執行第一次,而不是第二次執行相同的控制。該控件通過js動態獲取其類名和其他內容,如自動完成菜單。我嘗試了你建議但不工作的東西 – user2861226 2014-09-06 07:34:00