2017-02-24 104 views
0

我有一个从数据库读取的jQuery自动完成。Jquery自动完成并输入按键

一切正常,但当我按下输入时,我需要去数据库并检查输入的文本是否存在于表中,以便我可以选择它 - 否则我会提醒无效输入。

我尝试

我实现了源和选择方法,并执行了文本框的onkeypress方法。我得到我需要的结果,但即使在按下输入键后,自动完成功能仍在搜索数据库中的值。

如何阻止此问题,因为它会减慢我的页面。

代码:

$("#<%=txtSearch_Doc.ClientID%>").autocomplete({ 

      delay:1000, 
      source: function (request, response) { 
       var m_Subtype = $("#<%=hdn_Subtype_Doc.ClientID%>").val(); 
       var m_ConSocStr = $("#<%=hdn_ConSocStr_Doc.ClientID%>").val(); 
       var jsonObjects = { "prefixText": request.term, "m_Subtype": m_Subtype, "m_ConSocStr": m_ConSocStr }; 
       var jsonString = JSON.stringify(jsonObjects); 
       $.ajax({ 
        url: '<%=ResolveUrl("AutoCompleteForFile.asmx/AutoSelectDoc")%>', 
        data: jsonString, 
        dataType: "json", 
        delay: 0, 
        autoFocus: true, 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        success: function (data) { 
         response($.map(data.d, function (item) { 
          return { 
           label: item.split('|')[0],//show key 
           val: item.split('|')[1], //documentnumber 
          } 
         })) 
        } 
        , 
        error: function (response) { 
         if (response.responseText != "") { 
          alert(response.responseText); 
         } 
        }, 
        failure: function (response) { 
         if (response.responseText != "") { 
          alert(response.responseText); 
         } 
        } 
       }); 
      }, 
      //begin select event 
      select: function (e, i) { 
       $("#<%=hdn_Number_Doc.ClientID%>").val(i.item.val); 
       $("#<%=txtSearch_Doc.ClientID%>").val(i.item.val.trim()); 
       if (i.item.val == "") { 
        $("#<%=hdn_Number_Doc.ClientID%>").val("0"); 
        $("#<%=txtSearch_Doc.ClientID%>").val(""); 
       }     
       return false; 
      }, 
      //end select event 
      minLength: 1,    
      autoFocus: false //IF TRUE IT WILL SELECT THE FIRST ROW BY DEFAULT, IF FALSE IT WILL NOT SELECT THE FIRST ROW 
     }) 
      //end autocomplete 
      //key press event to handle enter pressed added by chahid on 12-jan-2016 
      .keypress(function (e) { 
       $("#<%=hdn_key_pressed.ClientID%>").val(e.keyCode); 
       if (e.keyCode == 13) { 
        e.preventDefault(); 
        var x = $("#<%=txtSearch_Doc.ClientID%>").val(); 
        var m_Subtype = $("#<%=hdn_Subtype_Doc.ClientID%>").val(); 
        var m_ConSocStr = $("#<%=hdn_ConSocStr_Doc.ClientID%>").val(); 
        var jsonObjects = { "prefixText": x, "m_Subtype": m_Subtype, "m_ConSocStr": m_ConSocStr }; 
        var jsonString = JSON.stringify(jsonObjects); 
        $("#<%=hdn_is_alert.ClientID%>").val("1"); 
        $.ajax({ 
         url: '<%=ResolveUrl("AutoCompleteForFile.asmx/CheckForDocExistance")%>', 
         data: jsonString, 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         success: function (dat) { 
          var json = JSON.stringify(dat); 
          obj = JSON.parse(json); 
          if (obj.d == "2") { // if it is empty 
           $("#<%=txtSearch_Doc.ClientID%>").val(""); 
           $("#<%=hdn_Number_Doc.ClientID%>").val("0"); 
          } 

          else { 
           if (obj.d.split('|')[0] == "1") {           
            $("#<%=txtSearch_Doc.ClientID%>").val(obj.d.split('|')[1].trim()); 
            $("#<%=hdn_Number_Doc.ClientID%>").val(obj.d.split('|')[1]);                    
            return false; 
           } else { 
            alert("Invalid input"); 
            $("#<%=txtSearch_Doc.ClientID%>").val(""); 
            $("#<%=txtSearch_Doc.ClientID%>").focus(); 
            $("#<%=hdn_Number_Doc.ClientID%>").val("0"); 
           } 
          } 
         }, 
         error: function (response) { 
          if (response.responseText != "") { 
           alert(response.responseText); 
          } 
         }, 
         failure: function (response) { 
          if (response.responseText != "") { 
           alert(response.responseText); 
          } 
         } 
        }); 
        $("#<%=txtSearch_Doc.ClientID%>").autocomplete('close'); 
       } 
      }) 

回答

0

OK我设法找到了解决办法:我加我在哪里检查keypresscode和返回false来自动完成搜索事件时,它是回车键:

search: function (event, ui) { 
       var key = $("#<%=hdn_key_pressed.ClientID%>").val();     
       if (key == 13) 
        return false; 
       else 
        return true; 
      },