1

リモート データ ソースで Bloodhound 提案エンジンを使用する typeahead.js プラグインを初期化する JQuery コードを DRY しようとしています。これまでのコードは次のとおりです。

var locsData = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace("name"),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    url: "/locations/search.json?q=%QUERY",
    ajax: {
      beforeSend: function(xhr, settings) {
        $("#typeahead1").addClass('loading-text');
      },
      complete: function(xhr, status) {
        $("#typeahead1").removeClass('loading-text');
      }
    }
  },
  limit: 100
});
locsData.initialize();

$("#typeahead1").typeahead({
  minLength: 3
}, {
  name: "locs",
  displayKey: "name",
  source: locsData.ttAdapter()
});

このコードをさまざまなテキスト フィールドに一般化しようとしています。それは問題ではありません。使用でき$(".myClass").typeahead({ ... })、プラグインはこれらすべてのコントロールに対して初期化されます。私が直面している問題はajax、Bloodhound 構成のコールバック関数 ( beforeSendcompleteなど) にあります。これらの関数内のテキスト フィールドの "loading.gif" クラスを切り替えています。参照を取得するにはそのコードが必要です。呼び出しオブジェクトに。

これらのコールバック内の呼び出しテキスト フィールドへの参照を取得するにはどうすればよいですか? 私はこのようなものが必要です:

$(<text-field reference>).addClass('loading-text');

誰かが私を助けてくれることを願っています。前もって感謝します!


編集- 今のところ、問題を解決する次のコードを使用しています、呼び出し元のオブジェクト参照(この件名) の取得に関する質問はまだ保留中です。

    if ($(document.activeElement).typeahead != null) {
      $(document.activeElement).addClass('loading-text');
    }
4

0 に答える 0