2011-12-20 51 views
2

すべてはそれが

にjqueryのオートコンプリートのプラグの書き込み_CREATE機能をオーバーすることは可能ですが、それでオートコンプリートプラグの書き込み_CREATE機能の上にすることは可能ですか?

もしそうなら、正しいアプローチは何ですか?

私が終わったので、私が直面している問題の関数を作成書きたい:

問題:矢印上下の場合

1.UPとDOWNの矢印キー

をキー、

autocompleteプラグインにはevent.preventDefault()があります。このため、メニューが表示されていなくても、テキストエリア内でキャレット移動が行われないようにしています( )。私の場合は

2.エスケープキー

テキストエリアに入力している間、私は、エスケープキーを押すと、私は
テキスト領域にテキストをクリアするためにきました。しかし、オートコンプリートプラグインは、 エスケープキーが押された場合に、テキスト領域に入力された値をリセットします。

SO、 jqueryオートコンプリートプラグインの_create関数を上書きする方法を教えてください。 _CREATE機能を上書きする事前

答えて

0

ありがとう:

$.ui.autocomplete.prototype._create = function() { 
    // new create function 
} 

代替は、単にjquery.ui.autocomplete.jsのソースコードを変更し、変更されたファイルを含めることです。

+0

私はjquery.ui.autocomplete.jsファイルを直接変更する権限がありません。それを行う他の方法はありますか?そして私が言及した問題はどうですか、それを解決する最善の方法は何ですか? – Cherry

0

私の意見では、を使わずにできることはあまりありませんコーディング。

変更を制限する方法はありますが、オリジナルの​​プラグインにバインドされたイベントハンドラをバインド解除し、変更されたハンドラ(元のものに基づいて)でイベントを再バインドすることです。それは非常に複雑ではありません

、これを行うための鍵は$(this).data('autocomplete');

とjqueryのデータとして要素に保存されているプラ​​グインのインスタンスを取得することです。ここのコードです:

$('#myinput').autocomplete({ ... }) 
    .unbind("keydown.autocomplete") 
    .bind("keydown.autocomplete", function(event) { 

     // obtain the plugin instance 
     var self = $(this).data('autocomplete'); 

     if (self.options.disabled || self.element.propAttr("readOnly")) { 
      return; 
     } 

     suppressKeyPress = false; 
     var keyCode = $.ui.keyCode; 
     switch (event.keyCode) { 
     case keyCode.PAGE_UP: 
      self._move("previousPage", event); 
      break; 
     case keyCode.PAGE_DOWN: 
      self._move("nextPage", event); 
      break; 
     case keyCode.UP: 
      self._move("previous", event); 

      // disable the prevent 
      // event.preventDefault(); 

      break; 
     case keyCode.DOWN: 
      self._move("next", event); 

      // disable the prevent 
      // event.preventDefault(); 

      break; 
     case keyCode.ENTER: 
     case keyCode.NUMPAD_ENTER: 
      // when menu is open and has focus 
      if (self.menu.active) { 
       // #6055 - Opera still allows the keypress to occur 
       // which causes forms to submit 
       suppressKeyPress = true; 
       event.preventDefault(); 
      } 
      //passthrough - ENTER and TAB both select the current element 
     case keyCode.TAB: 
      if (!self.menu.active) { 
       return; 
      } 
      self.menu.select(event); 
      break; 
     case keyCode.ESCAPE: 

      // clear the input value on ESC 
      self.element.val(''); 

      self.close(event); 
      break; 
     default: 
      // keypress is triggered before the input value is changed 
      clearTimeout(self.searching); 
      self.searching = setTimeout(function() { 
       // only search if the value has changed 
       if (self.term != self.element.val()) { 
        self.selectedItem = null; 
        self.search(null, event); 
       } 
      }, self.options.delay); 
      break; 
     } 
    }); 

ここにはjsfiddleがあります。

+0

便利な情報ありがとうございます。もう1つのことは、私がテキストエリアにオートコンプリートを追加するときです。IEで遅いのですが、パフォーマンスを改善するにはどうすればいいですか?あらかじめありがとう – Cherry

+0

ちょうど私は分かりません。このプラグインは、最初にテキストエリアで使用するためのものではありませんでした。たぶんそれはIEだからです。いつそれは「遅い」(表示、データを得る...)ですか? –

+0

メニューが表示されている場合、上矢印または下矢印を押してメニュー内の前または次の項目をフォーカスすると、ホバー状態が非常にゆっくりと移動しています。 – Cherry