それぞれが関連する「すべて」オプションを持つ複数のチェックボックスグループを持つフォームがあり、クリックすると関連するすべてのチェックボックスが選択解除されます。関連するチェックボックスのいずれかがチェックされている場合、フォームは「すべて」オプションのチェックを外す必要もあります。基本的に、フォームは「すべて」オプション、関連オプションのいずれか、またはオプションなしのいずれかを送信できます。
いずれかのチェックボックスをオンにすると、「すべて」オプションを含め、関連するラベルが太字になります。
このロジックをjQueryで記述しましたが、関連するオプションの1つがチェックされているときに「すべて」オプションの選択を解除すると、1つの部分が正しく機能しないようです。ユーザーが関連するオプションのいずれかをクリックすると機能しますが、チェックしたばかりの「すべて」オプションもチェック解除します。
私の質問は、「ソース」イベントが何であったかをどのように判断できるので、そのコードの一部を実行するかどうかを判断できるかということだと思います。
「「すべて」の選択を解除」したデモはコメントアウトされています: http://jsfiddle.net/8Ctvd/
JS:
$(function () {
$(".all").change(function () {
if ($(this).is(":checked")) $("input[rel='" + $(this).attr("rel") + "']:checked").not(".all").removeAttr("checked").change();
});
$("input[type='checkbox']").change(function (e) {
if ($(this).is(":checked")) $("label[for='" + $(this).attr("id") + "']").css("font-weight", "bold");
else {
$("label[for='" + $(this).attr("id") + "']").css("font-weight", "normal");
/* THIS UNCHECKS THE ALL EVERYTIME
if ($(this).not(".all"))
$("input.all[rel='" + $(this).attr("rel") + "']").removeAttr('checked').change();
*/
}
});
});
HTML:
<INPUT id=items_All class="checkbox all" name=items value=ALL type=checkbox rel="items">
<LABEL class="items checkbox-label" for=items_All>All</LABEL>
<INPUT id=items_1 class=checkbox name=items value=1 type=checkbox rel="items">
<LABEL class="items checkbox-label" for=items_1>Item 1</LABEL>
<INPUT id=items_2 class=checkbox name=items value=2 type=checkbox rel="items">
<LABEL class="items checkbox-label" for=items_2>Item 2</LABEL>
<INPUT id=items_3 class=checkbox name=items value=3 type=checkbox rel="items">
<LABEL class="items checkbox-label" for=items_3>Item 3</LABEL>
<br />
<INPUT id=widgets_All class="checkbox all" name=widgets value=ALL type=checkbox rel="widgets">
<LABEL class="widgets checkbox-label" for=widgets_All>All</LABEL>
<INPUT id=widgets_1 class=checkbox name=widgets value=1 type=checkbox rel="widgets">
<LABEL class="widgets checkbox-label" for=widgets_1>Widget 1</LABEL>
<INPUT id=widgets_2 class=checkbox name=widgets value=2 type=checkbox rel="widgets">
<LABEL class="widgets checkbox-label" for=widgets_2>Widget 2</LABEL>
<INPUT id=widgets_3 class=checkbox name=widgets value=3 type=checkbox rel="widgets">
<LABEL class="widgets checkbox-label" for=widgets_3>Widget 3</LABEL>