仅当按下特殊键时显示Jquery UI自动完成

仅当按下特殊键时显示Jquery UI自动完成,jquery,jquery-ui,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Ui Autocomplete,我有一个带有自动完成功能的文本框,我只想在按下点键时显示结果 我试过: $("#tags").on("keypress", function () { var keys = []; keys.unshift(e.which); if (String.fromCharCode(keys[0]) == ".") { } else { $("#tags").unbind(); } }); 但是,$(“#标记”).unbind(

我有一个带有自动完成功能的文本框,我只想在按下点键
时显示结果

我试过:

 $("#tags").on("keypress", function () {
     var keys = [];
     keys.unshift(e.which);
     if (String.fromCharCode(keys[0]) == ".") {

     } else {
         $("#tags").unbind();
     }
 });
但是,
$(“#标记”).unbind()从文本框中删除所有事件,如果我再次按点键,结果将不会显示


我怎样才能解决这个问题

您可以尝试这样的操作,而不是绑定/解除绑定(这样您就可以通过按
来切换自动完成的激活/停用:

$("#tags").on("keypress", function (e) {
     var keys = [];
     keys.unshift(e.which);
     if (String.fromCharCode(keys[0]) == ".") {
         if(autocomplete_flag == 0) {
             autocomplete_flag = 1;
             $(this).autocomplete( "enable" );
         } else {
             autocomplete_flag = 0;
             $(this).autocomplete( "disable" );
         }
     }
 });

如下所示:

下面是一个模拟visual studio功能的解决方案:
它存储最后一个“.”的位置,并使用其后的任何内容作为自动完成的过滤器

 $(function () {
     var availableTags = [
         "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"];
     var lastDot = -1;

     $("#tags").autocomplete({
         minLength: 0,
         source: function (request, response) {
             if (lastDot>=0) {
                 response($.ui.autocomplete.filter(
                 availableTags, extractLast(request.term.substring(lastDot+1))));          
             }
         },
         focus: function () {
             return false;
         },
         select: function (event, ui) {
             var terms = split(this.value);
             terms.pop();
             terms.push(ui.item.value);
             terms.push("");
             this.value = this.value.substr(0,lastDot+1);
             this.value += terms.join("");
             return false;
         }
     }).on("keypress", function (e) {
         var keys = [];
         keys.unshift(e.which);
         if (String.fromCharCode(keys[0]) == ".") {
             lastDot =  $("#tags").val().length;

         }
     });

     function split(val) {
         return val.split(/,\s*/);
     }

     function extractLast(term) {
         return split(term).pop();
     }
 });

如果您只想解除按键事件的绑定,$(“#标记”).unbind(“按键”);(您实际上应该使用$(“#标记”).off(“按键”);)我不想解除keypress事件的绑定,我想解除自动完成事件的绑定,然后在按下时重新绑定它。这是您想要的吗?我让它模拟Visual Studio的功能:是的!请将其作为答案发布!不确定您是否理解该问题。我想在Visual Studio中执行类似于autosuggest的操作。autos仅当用户按下“.”时,提示才会出现。自动完成字符串中将包含“.”,因为您的“可用标记”中没有一个包含“.”。它们不会被匹配并添加到自动完成列表中,因此您需要从字符串中删除“.”尝试添加“.ActionScript”两次。它仅在第一次工作时有效。