2

プラグインが検索するコンテキストの定義に問題があります。

つまり、複数の入力テキストがあり (ユーザーはボタンからどんどん追加できます)、次のようなことをしています:

$('.inp_txt').quicksearch('ul.myList li');

入力テキストごとに、選択ボックスのようなリストがあり、入力中に結果が表示されます。問題は、ユーザーが最初の入力で入力を開始すると、プラグインが他のすべての入力からすべての .myList を表示することです。ユーザーがいる入力テキストからのリストのみを表示する必要があります。

ナビゲート中にJSを介してより多くの入力を追加できるため、リストごとに異なるクラスを使用して、それぞれに対してプラグインを具体的に呼び出すことはできないと思います。

とにかく、$(this)または何か他のものを使用してコンテキストを定義できるので、プラグインはその特定のリストでのみ検索することを認識していますか?

ありがとう!

4

1 に答える 1

1

あなたが抱えている問題は、構文が単一のプラグイン インスタンスをセレクタ内のすべての項目に適用することです。

$('.inp_txt').quicksearch(...)呼び出しに似('.inp_txt').click(...)ています-一致するすべての要素に使用される1つのハンドラーを取得します。

これを回避するには、次のようなことを行う必要があります。

$('.inp_txt').each(function (index, value) {
    var $input = $(value);

    // Get a reference to the list you want for this input...
    var $quickSearch = $('ul.myList li');

    $input.quicksearch($quicksearch);
});

このコードは、各.inp_txt項目をループし、それぞれに固有のハンドラーを適用します。

あなたのシナリオでは、1 つしかないようにul.myList思えます。これが、常に同じリストが表示される別の理由である可能性があります。その場合は、次のように考えることができます...

<div>
  <input type="text" class="inp_txt" />
  <ul class="myList">
   <li>...</li>
  </ul>
</div>

次に、上記のコードを次のように適合させることができます。

$('.inp_txt').each(function (index, value) {
    var $input = $(value);
    var $quickSearch = $input.siblings('ul.myList');

    $input.quicksearch($quicksearch);
});

このようにして、テキスト ボックスごとに一意のリストを取得します。明らかに、これがアプリのロジックで可能かどうかを知るためのシナリオの残りの部分はわかりませんが、おそらく.

最後に、新しいコントロールを追加するときは、それらを作成しているコードを調整して、新しいハンドラーもそれらにアタッチする必要があります。何かのようなもの:

function addInput(/*... params ...*/) {
    /* Do your logic to create the control */
    $newInput.quicksearch($newList);
}

上記のコードでは、明らかに、$newInputnew となる要素と<input type="text" />、 と呼ぶ新しいリストを作成することが想定されています$newList

これがお役に立てば幸いです-そうでない場合は、お気軽にコメントを投稿して明確にしてください。回答を適応させようとします。

于 2012-12-03T17:56:10.557 に答える