私は、グループでselect
の要素を持っています。 option
をクリックしたときににあるoption
をすべて選択(または選択解除)する必要があります。同時に複数のoptgroup
を選択できるようにする必要があります。optgroup内のすべてのオプションを選択してください
私は仕事にそれを望む方法がこれです:何も選択されていない場合は
- 、私は1つのオプションをクリックして、選択したのと同じOPTGROUPにオプションのすべてを取得したいです。
- optgroupsがすでに選択されている場合は、別のoptgroupで1つのオプションをクリックし、それらのオプションをすべて選択します。
- optgroupsがすでに選択されている場合は、選択されていないoptgroupのオプションをCtrlキーを押しながらクリックして、そのoptgroupのすべてのオプションも選択できるようにします。
- optgroupsがすでに選択されている場合は、選択したoptgroupのオプションをCtrlを押しながらクリックし、そのグループのすべてのオプションを選択解除したいと考えています。
HTML::
<select multiple="multiple" size="10"> <optgroup label="Queen"> <option value="Mercury">Freddie</option> <option value="May">Brian</option> <option value="Taylor">Roger</option> <option value="Deacon">John</option> </optgroup> <optgroup label="Pink Floyd"> <option value="Waters">Roger</option> <option value="Gilmour">David</option> <option value="Mason">Nick</option> <option value="Wright">Richard</option> </optgroup> </select>
のjQuery:
$('select').click(selectSiblings); function selectSiblings(ev) { var clickedOption = $(ev.target); var siblings = clickedOption.siblings(); if (clickedOption.is(":selected")) { siblings.attr("selected", "selected"); } else { siblings.removeAttr("selected"); } }
私はここで例を作った:http://jsfiddle.net/mflodin/Ndkct/ を(悲しいことに、私は次のように作成したスタックオーバーフロー上の他の回答を見てみると
jsFiddleはIE8をこれ以上サポートしていないようです。)
これはFirefox(16.0)では期待通りに動作しますが、IE8ではまったく動作しません。他の回答から、IE8がoptgroup
またはoption
というイベントのclick
イベントを処理できないことがわかりました。これがselect
にバインドしてから$(ev.target)
を使用した理由です。しかし、IE8では、$(ev.target)
はまだselect
全体を指し、クリックしたのはoption
ではありません。クリックされたoption
(またはoptgroup
が含まれています)が選択されているか、選択解除されているかを確認するにはどうすればよいですか?
Chrome(20.0)では、マウスがselect
を離れるまで、選択解除は行われません。誰かがこれに対する回避策を知っていますか?
(このフィドルhttp://jsfiddle.net/Ndkct/44/はそれをより使いやすくするために、親のチェックボックスを追加します)今
十分に簡単ですこれは私が望むものとは何の関係もありません。私はすべての 'options'を選択する' option'リンクをクリックしません。 – mflodin