2017-07-28 49 views
0

自動完成功能不能正常工作時,直接按這裏所說的工程確定: -自動完成,當作爲函數調用JQuery的

    $('#SearchString').autocomplete({        

         source: function (request, response) { 


          $('#Search_EggTimer').css('display', 'inline'); 

          $.ajax({ 
           url: '/KnowledgeBase/Autocomplete', 
           dataType: "json", 
           data: { 
            term: request.term, 
            ArticleTypeId: $('#ArticleTypeId').val() 
           }, 
           success: function (data) { 
            $('#Search_EggTimer').css('display', 'none'); 
            response(data); 
           } 
          }); 
         }, 

         select: function (event, ui) { 
          event.preventDefault(); 
          retrieveselectedID(ui.item.value); 
          $('#SearchString').autocomplete("close"); 

         }, 
         focus: function (event, ui) { 
          event.preventDefault(); 
         } 
        }); 

但是,如果我嘗試並調用自動完成的功能,這是行不通的,它只是在'source:function(request,response)'代碼行之前退出並且永遠不會被調用。有什麼建議麼?

 $('#SearchString').on("input", (function (event) { 


        if ($('#ArticleTypeId').val() == '5') { 

         var numero = String.fromCharCode(event.keyCode); 
         var myArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
         index = myArray.indexOf(numero);// 1 
         var longeur = $('#SearchString').val().length; 
         if (window.getSelection) { 
          text = window.getSelection().toString(); 
         } if (index >= 0 & text.length > 0) { 
         } else if (index >= 0 & longeur < 10) { 
          SearchAutocomplete(); 
         } else { return false; } 

        } 
        else { 

         SearchAutocomplete(); 
        } 

       })); 

       // Autocomplete function 

       function SearchAutocomplete() {    


        $('#SearchString').autocomplete({        

         source: function (request, response) { 


          $('#Search_EggTimer').css('display', 'inline'); 

          $.ajax({ 
           url: '/KnowledgeBase/Autocomplete', 
           dataType: "json", 
           data: { 
            term: request.term, 
            ArticleTypeId: $('#ArticleTypeId').val() 
           }, 
           success: function (data) { 
            $('#Search_EggTimer').css('display', 'none'); 
            response(data); 
           } 
          }); 
         }, 

         select: function (event, ui) { 
          event.preventDefault(); 
          retrieveselectedID(ui.item.value); 
          $('#SearchString').autocomplete("close"); 

         }, 
         focus: function (event, ui) { 
          event.preventDefault(); 
         } 
        }); 
       } 
+0

不知道你想在這裏完成什麼。當你說'不工作'時,什麼不工作,你期望什麼? –

+0

澄清SearchAutocomplete()函數中的自動完成功能永遠不會被擊中。使用chrome調試器,運行的最後一行代碼是'$('#SearchString')。autocomplete。 所以基本上AJAX調用從不發生,我的搜索結果不會返回到SearchString輸入框。 – user2808981

+0

爲什麼你需要按照不起作用的第二段代碼來調用它?哪個jQuery庫'autocomplete'來自? –

回答

0

嘗試改變這條線,從「輸入」到「變」:

$('#SearchString').on("change", (function (event) { 
+0

謝謝,但沒有奏效。 代碼流入SearchAutocomplete()函數。 。 和之後點擊這一行:$(「#SearchString在」)自動完成({ 但隨後只是之前退出: - 來源:函數(請求,響應){ 當我看在控制檯中的Chrome degugger它報告: - [違規]'變更'處理程序花了6454ms – user2808981

0

好吧,我覺得這裏發生了什麼是自動完成不喜歡被一個子功能的關鍵事件和我因此認爲它失去了約束力。

我試圖做的是有效地做到這一點: -

$('#SearchString').keypress(function (event) { 

$('#SearchString').autocomplete({ 

我試圖劫持事件的關鍵限制字符輸入它擊中了自動完成之前。

作爲一種解決方法,我重新編寫了代碼來驗證,而不是限制輸入,它不是很優雅,但它的工作原理。

   $('#SearchString').autocomplete(
        { 
         source: function (request, response) { 

          if ($('#ArticleTypeId').val() == '5') { 

           var input = $('#SearchString').val(); 
           var numofCharacters = $('#SearchString').val().length; 
           var myArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
           var index = 0; 
           var checkresult = 0; 

           while (checkresult != -1 && index < numofCharacters) { 

            checkresult = myArray.indexOf(input.charAt(index)) 
            index++; 
           } 
           if (checkresult == -1) { 

            alert("Please enter numerical characters only"); 
            return false; 
           } 
          } 

          $('#Search_EggTimer').css('display', 'inline'); 

          $.ajax({ 
           url: '/KnowledgeBase/Autocomplete', 
           dataType: "json", 
           data: { 
            term: request.term, 
            ArticleTypeId: $('#ArticleTypeId').val() 
           }, 
           success: function (data) { 
            $('#Search_EggTimer').css('display', 'none'); 
            response(data); 
           } 
          }); 
         }, 

         select: function (event, ui) { 
          event.preventDefault(); 
          retrieveselectedID(ui.item.value); 
          $('#SearchString').autocomplete("close"); 

         }, 
         focus: function (event, ui) { 
          event.preventDefault(); 
         } 
        }); 
      }); 
0

已經與我的我現在已經重新編寫代碼的開發者朋友,但使用的輸入限制討論這一點。這是一種享受。

// Check Keys entered before output to input box 
       $('#SearchString').keypress(function (event) { 
        if ($('#ArticleTypeId').val() == '5') { 
         var number = String.fromCharCode(event.keyCode); 
         var myArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
         index = myArray.indexOf(number);// 1 
         if (index === -1) 
          return false; 
         return true; 
        } 
       }); 

       // Autocomplete function 
       $('#SearchString').autocomplete(
        { 
         source: function (request, response) { 

          $('#Search_EggTimer').css('display', 'inline'); 

          $.ajax({ 
           url: '/KnowledgeBase/Autocomplete', 
           dataType: "json", 
           data: { 
            term: request.term, 
            ArticleTypeId: $('#ArticleTypeId').val() 
           }, 
           success: function (data) { 
            $('#Search_EggTimer').css('display', 'none'); 
            response(data); 
           } 
          }); 
         }, 

         select: function (event, ui) { 
          event.preventDefault(); 
          retrieveselectedID(ui.item.value); 
          $('#SearchString').autocomplete("close"); 

         }, 
         focus: function (event, ui) { 
          event.preventDefault(); 
         } 
        }); 
      }); 

希望這可以幫助任何人在未來。