2017-07-28 50 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(); 
         } 
        }); 
      }); 

希望这可以帮助任何人在未来。