2011-01-18 20 views
4

を入力された場合にのみ開始する必要が私はあなたたちはこの優れたプラグインを見ていると確信している:jQueryのオートコンプリート - 特殊文字は

http://code.drewwilson.com/entry/autosuggest-jquery-plugin

私はそれをチェックアウトし、開始するためのオプションを見つけることができませんでした特定の文字が入力された場合にのみを自動投稿プラグイン。この場合、私はそれを@記号にする必要があります。私は@記号が入力されるまでは表示しないようにドロップダウンのために必要な、しかし(デフォルトは1)数

: minChars:

は、私はそれが文字の最小数を設定するオプションを持っている参照してください。

はFYI、ここに感謝

 var defaults = { 
     asHtmlID: false, 
     startText: "Enter Name Here", 
     emptyText: "No Results Found", 
     preFill: {}, 
     limitText: "No More Selections Are Allowed", 
     selectedItemProp: "value", //name of object property 
     selectedValuesProp: "value", //name of object property 
     searchObjProps: "value", //comma separated list of object property names 
     queryParam: "q", 
     retrieveLimit: false, //number for 'limit' param on ajax request 
     extraParams: "", 
     matchCase: false, 
     minChars: 1, 
     keyDelay: 400, 
     resultsHighlight: true, 
     neverSubmit: false, 
     selectionLimit: false, 
     showResultList: true, 
     start: function(){}, 
     selectionClick: function(elem){}, 
     selectionAdded: function(elem){}, 
     selectionRemoved: function(elem){ elem.remove(); }, 
     formatList: false, //callback function 
     beforeRetrieve: function(string){ return string; }, 
     retrieveComplete: function(data){ return data; }, 
     resultClick: function(data){}, 
     resultsComplete: function(){} 
    }; 
    var opts = $ 

jquery.autoSuggest.js

にオプションです!

答えて

0

これまではこのコントロールを使用していませんでしたが、jquery.autoSuggest.jsファイル(非圧縮)を調べたいと思うようです。このケースステートメントを確認してください。 default:ケースをcase x:に変更する必要があると思います。ここで、xは、オートコンプリートのトリガーに使用するキーのASCIIコードです。

beforeRetrieve: function(string){ 
if (string.indexOf('@') == -1) return ""; 
return string; 
} 

ドキュメントから:

   switch(e.keyCode) { 
        case 38: // up 
         e.preventDefault(); 
         moveSelection("up"); 
         break; 
        case 40: // down 
         e.preventDefault(); 
         moveSelection("down"); 
         break; 
        case 8: // delete 
         if(input.val() == ""){       
          var last = values_input.val().split(","); 
          last = last[last.length - 2]; 
          selections_holder.children().not(org_li.prev()).removeClass("selected"); 
          if(org_li.prev().hasClass("selected")){ 
           values_input.val(values_input.val().replace(","+last+",",",")); 
           opts.selectionRemoved.call(this, org_li.prev()); 
          } else { 
           opts.selectionClick.call(this, org_li.prev()); 
           org_li.prev().addClass("selected");  
          } 
         } 
         if(input.val().length == 1){ 
          results_holder.hide(); 
          prev = ""; 
         } 
         if($(":visible",results_holder).length > 0){ 
          if (timeout){ clearTimeout(timeout); } 
          timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); 
         } 
         break; 
        case 9: case 188: // tab or comma 
         tab_press = true; 
         var i_input = input.val().replace(/(,)/g, ""); 
         if(i_input != "" && values_input.val().search(","+i_input+",") < 0 && i_input.length >= opts.minChars){ 
          e.preventDefault(); 
          var n_data = {}; 
          n_data[opts.selectedItemProp] = i_input; 
          n_data[opts.selectedValuesProp] = i_input;                    
          var lis = $("li", selections_holder).length; 
          add_selected_item(n_data, "00"+(lis+1)); 
          input.val(""); 
         } 
        case 13: // return 
         tab_press = false; 
         var active = $("li.active:first", results_holder); 
         if(active.length > 0){ 
          active.click(); 
          results_holder.hide(); 
         } 
         if(opts.neverSubmit || active.length > 0){ 
          e.preventDefault(); 
         } 
         break; 
        default: 
         if(opts.showResultList){ 
          if(opts.selectionLimit && $("li.as-selection-item", selections_holder).length >= opts.selectionLimit){ 
           results_ul.html('<li class="as-message">'+opts.limitText+'</li>'); 
           results_holder.show(); 
          } else { 
           if (timeout){ clearTimeout(timeout); } 
           timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); 
          } 
         } 
         break; 
       } 

は、より多くの私はあなたがbeforeRetrieveと遊ぶことができると思います。この

   switch(e.keyCode) { 
        case 38: // up 
         e.preventDefault(); 
         moveSelection("up"); 
         break; 
        case 40: // down 
         e.preventDefault(); 
         moveSelection("down"); 
         break; 
        case 8: // delete 
         if(input.val() == ""){       
          var last = values_input.val().split(","); 
          last = last[last.length - 2]; 
          selections_holder.children().not(org_li.prev()).removeClass("selected"); 
          if(org_li.prev().hasClass("selected")){ 
           values_input.val(values_input.val().replace(","+last+",",",")); 
           opts.selectionRemoved.call(this, org_li.prev()); 
          } else { 
           opts.selectionClick.call(this, org_li.prev()); 
           org_li.prev().addClass("selected");  
          } 
         } 
         if(input.val().length == 1){ 
          results_holder.hide(); 
          prev = ""; 
         } 
         if($(":visible",results_holder).length > 0){ 
          if (timeout){ clearTimeout(timeout); } 
          timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); 
         } 
         break; 
        case 9: case 188: // tab or comma 
         tab_press = true; 
         var i_input = input.val().replace(/(,)/g, ""); 
         if(i_input != "" && values_input.val().search(","+i_input+",") < 0 && i_input.length >= opts.minChars){ 
          e.preventDefault(); 
          var n_data = {}; 
          n_data[opts.selectedItemProp] = i_input; 
          n_data[opts.selectedValuesProp] = i_input;                    
          var lis = $("li", selections_holder).length; 
          add_selected_item(n_data, "00"+(lis+1)); 
          input.val(""); 
         } 
        case 13: // return 
         tab_press = false; 
         var active = $("li.active:first", results_holder); 
         if(active.length > 0){ 
          active.click(); 
          results_holder.hide(); 
         } 
         if(opts.neverSubmit || active.length > 0){ 
          e.preventDefault(); 
         } 
         break; 
        case x: 
         if(opts.showResultList){ 
          if(opts.selectionLimit && $("li.as-selection-item", selections_holder).length >= opts.selectionLimit){ 
           results_ul.html('<li class="as-message">'+opts.limitText+'</li>'); 
           results_holder.show(); 
          } else { 
           if (timeout){ clearTimeout(timeout); } 
           timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); 
          } 
         } 
         break; 
        default: 
          //Do Nothing 
       } 
+0

お返事ありがとうございます....このコードは今ではドロップダウンを開始していないようです....私はat記号が入力されたときに起動する必要があります。誰かが@をタイプすると、それはオン状態になり、@の後ろにさらにテキストを入力すると自動尋問を開始します。他のアイデア? –

+0

それは大文字であるべきです:64私は信じています...それを追加すると、@記号が決してないデータで利用可能かどうかを調べるために検索しようとしているので、大文字小文字を追加:スペースバーの32、それは実際にデータ内のスペースを見つけるので、正常にアクティブになります。ちょうど@記号が入力されたときに "アクティブにする"必要があります。ありがとう –

+0

実際には大文字小文字:50 ...これは現在動作しています...問題は、データ内の@記号を検索していることです...私はat記号の後の文字列を見つける必要があります。追加のお礼ありがとうございます –

1

ようなものでした

beforeRetrieve:コールバック関数 - カスタム機能AJAXリクエストが行われる直前に実行されるか、ローカル対象が海になる前に実行されます飾った。これは、処理される前に検索文字列を変更するために使用されます。したがって、ユーザがAutoSuggestボックスに "jim"を入力した場合、この関数を呼び出してクエリに "guy_"を追加することができます。最終的なクエリ= "guy_jim"を作る。検索クエリがこの関数に渡されます。例:beforeRetrieve:function(文字列){戻り文字列; }

+0

ありがとうございました...しかし、これにより、ドロップダウン内の文字の間にあるすべてのスペースを強調表示する奇妙な動作が作成されました。 –