2

jqueryオートコンプリートプラグインを使用しており、ユーザーが入力した特定のキーに基づいてオートコンプリートを手動でトリガーしようとしています。オートコンプリートをオンザフライで入力にバインドしようとしています。これにより、ユーザーが特定のキーを入力して「検索対象のデータを入力しています」をトリガーすると、オートコンプリートが一致の検索を開始できるようになります。フィールドの、必ずしも最初にではありません。

keypressイベントを入力にバインドしています。ユーザーが「=」のような特定のキーを入力すると、配列内のすべての要素を表示したいと思います。次にユーザーが文字を入力すると、その文字の配列から一致するオプションがオートコンプリートされます。これは多かれ少なかれExcelで起こることを模倣しようとしています。ユーザーが等号キーを押して使用可能な関数を見ると、「=」キーは入力の最初の要素である必要はなく、毎回オートコンプリートする必要があります。 ="が押され、オプションが選択されるたびにそのacのバインドが解除されます。

var array1 = ['one','two','three'];

$.input1.bind('keypress', function(event) {
  var keyCode;
  if (event.keyCode > 0) {
    keyCode = event.keyCode;
  } else if (typeof(event.charCode) != "undefined") {
    keyCode = event.charCode;
  }

  if (String.fromCharCode(keyCode) == '=') {
    $.input1.unbind('keypress');  

    $.input1.autocomplete(array1);

    $.input1.blur();
    $.input1.focus();
    e = $.Event('keydown');
    e.which = keyCode;
    $.input1.trigger(e);
  }

});

オートコンプリートをトリガーしても、ユーザーがテキストの前に一致する可能性のあるものを入力した場合、前のテキストのために一致しません。したがって、ユーザーが「abd =」と入力すると、オートコンプリートは「=」だけでなく「abb=」をqパラメーターとして取得します。

どんな助けでも本当にありがたいです、私はとても立ち往生しています!!

4

2 に答える 2

4

本当に必要なのは、オートコンプリート プラグインが検索を行う前に、フィールドの値をフィルターできることです。プラグインを見ると、組み込まれているようには見えません。しかし、プラグインを追加することを止めません。

プラグイン コードを開き、関数 lastWord() を見つけます。261 行目を見てください。次に、これをその関数に追加します。

if ( options.formatValue ){
    value = options.formatValue(value);
}

したがって、lastWord 関数は次のようになります。

function lastWord(value) {
    if ( options.formatValue ){
        value = options.formatValue(value);
    }
    if ( !options.multiple )
        return value;
    var words = trimWords(value);
    return words[words.length - 1];
}

次に、jquery コードで次のようなことができます。

$(document).ready(function(){
    var array1 = ['one','two','three'];
    $('#test').autocomplete(array1,{
                formatValue: function(value){
                    if (value.search('=') == -1) return '';
                    return value.substring(value.search('=')+1);
                }
    });
});

これにより、検索前にフィールドの値をフィルタリングしてフォーマットできます。値に「=」文字が含まれている場合にのみ検索を実行したいので、それを検索し、見つからない場合は空の文字列を返します。見つかった場合は、それとその前のすべてを削除し、その後にユーザーが入力しているものを返します。

于 2009-07-30T03:49:24.553 に答える
1

コードの2行目を追加することで、autocomplete.jsを変更できます。

  ...
  .bind( "keydown.autocomplete", function( event ) {
+ self.options.keydownEvent=event;
  if ( self.options.disabled ) {...

次に、このようにソース関数内でkeydownEventを参照します

source:function(){
var event=this.options.keydownEvent;
... //Handling the event

varイベントにはwhichフィールドがあることに注意してください。たとえば、event.whichが13の場合、Enterキーが押されました。それが役に立てば幸い。

于 2012-11-24T02:19:24.663 に答える