これはないはあなたに必要なUXを与えるだろうが、それはトグルイベントはunbindedなって、あなたが持っている問題を解決します:あなたが使用することができますいずれかhttp://jsfiddle.net/rkw79/SwrVK/9/
$("select").delegate('optgroup', 'click', function() {
$(this).toggle(function() {
$(this).children().attr("selected", "selected");
}, function() {
$(this).children().attr("selected", false);
});
});
を.live ()または.delegate();問題は、 'クリック'や 'ホバー'のようなベースイベントでのみ動作し、 'トグル'のような派生イベントではない(これが上にラップされた理由です)。
この解決策は、バインド解除の問題を解決することに注意してください。しかし、UXの点では、いくつかの調整が必要です。
更新:UXの追加http://jsfiddle.net/rkw79/SwrVK/15/
は、私はあなたの意図は、グループをクリックしたときにすべての子のオプションを選択することだと思います。以下のコードはそれを行います。
$("select").delegate('optgroup', 'click', function() {
$(this).children().attr("selected", "selected");
});
以下のコードは、各子オプションを個別に選択できるようにしています。イベントはノードツリー上に伝播しますので、ノードツリーを防止する必要があります(この場合)。
$("select").delegate('option', 'click', function(e) {
e.stopPropagation();
});
出典
2011-10-19 17:46:01
rkw
最新のバージョンのjQueryを使用している場合は、 'prop'メソッドを使用する必要があります。以前のバージョンのjQueryを使用している場合は、 'attr( 'selected'、false)の代わりに' removeAttr( 'selected') 'を使用してください。 ' – zzzzBov