0

私は非常に単純な選択ボックスを持っています:

<select multiple="multiple" name="Condiments">
  <option selected="selected">Mustard</option>
  <option selected="selected">Ketchup</option>
</select>

jQuery UI MultiSelect Widget を使用して、少し気の利いたものにしています。

https://github.com/ehynds/jquery-ui-multiselect-widget

具体的には、ウィジェットの初期化時にオプションの 1 つを動的に設定しようとしています。私がこれを行うとき:

$("select").multiselect({
  selectedText: function(numChecked, numTotal, checkedItems){
    return "Foo";
  }
});

selectedTextオプションを「Foo」に適切に設定しますが、これを行うと:

$("select").multiselect({
  selectedText: function(numChecked, numTotal, checkedItems){
    return $(this).attr("name");
  }
});

$(this) は DOM の他の場所からのスパンであると考えます。

ページに 1 つしか選択されていない場合は問題ありませんが、複数ある場合は、それぞれにこのオプションを設定する方法が必要です。$(this) から現在の select 要素に到達する明白な方法はありますか? または、同じ一般的な問題を解決するための明白な代替手段はありますか?

4

2 に答える 2

2

selectedTextコールバックでは、要素thisの複数選択機能をインスツルメントする JavaScript オブジェクトだと思います。要素をラップする jQuery オブジェクトであるプロパティがあります<select>element<select>

したがって、次を使用する必要があります。

$("select").multiselect({
    selectedText: function(numChecked, numTotal, checkedItems){
        return this.element.attr("name");
    }
});
于 2013-04-13T02:31:37.613 に答える
0

プラグインに組み込まれていない要素インスタンスから特定のデータまたはプロパティを渡す必要がある複数の要素でプラグインを初期化するための一般的な方法は、以下を使用して要素コレクションをループすることeachです。

$('select').each(function(){
   /* "this" will be instance of "select"*/
  /* prep data needed before initialiizing plugin*/

   var name= this.name;
   /* initialize plugin for current instance of element*/
   $(this).multiselect({
      selectedText: function(numChecked, numTotal, checkedItems){
        /* variable declared above*/
         return name;
       }
    });

});

特定のプラグイン、またはthisコールバック内にあるものはわかりませんが、示されているアプローチを使用すると、インスタンスがeachループ内で既に分離されているため、知る必要はありません

編集。プラグインが要素用であることを考えずにこれを書き<select>ました。返品を希望nameする理由がわからない..どのオプションを選択しても同じ

于 2013-04-13T02:35:35.233 に答える