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 に答える