1

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

我试过了:

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

     } else {
         $("#tags").unbind();
     }
 });

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

我怎样才能解决这个问题?现场jsfiddle

4

2 回答 2

2

这是一个模拟 Visual Studio 所做的解决方案:http: //jsfiddle.net/xHy6n/2/
它存储最后一个“。”的位置。并使用它之后的任何内容作为自动完成的过滤器。

 $(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();
     }
 });
于 2013-05-13T22:48:34.630 回答
1

您可以尝试这样的事情,而不是绑定/取消绑定(因此您可以通过按以下方式切换自动完成的激活/停用.

$("#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" );
         }
     }
 });

像这样:http: //jsfiddle.net/darkajax/fEsN5/6/

于 2013-05-13T22:15:27.520 回答