当前位置:嗨网首页>书籍在线阅读

23-解决方案

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.5.2 解决方案

class 属性和 :checkbox 选择器直接找到切换开关。然后循环读取每个找到的切换开关,用 .siblings() 确定相关联的复选框,并附加 change 事件监听器:

//找到字段集中的"Select All"切换开关,循环读取找到的所有开关
$('fieldset .toggle:checkbox').each(function(){
   //以下代码使用多次,将其存储起来获得更高的效率
   // 切换开关复选框
   var $toggle = $(this);
   // 其他复选框
   var $checkboxes = $toggle.siblings('input:checkbox');
   // 监听切换开关的change事件
   $toggle.change(function(){
     if ( this.checked ) {
        // 如果选中,选择所有复选框
        $checkboxes.attr('checked','checked');
     } else {
        //如果没有选中,反选所有复选框
        $checkboxes.removeAttr('checked');
     }
   });
   //监听每个单独复选框(不包含切换开关)的change事件
   $checkboxes.change(function(){
     if ( this.checked ) {
        //如果复选框选中而其他复选框都选中,则选中切换开关
        if ( $checkboxes.length == $checkboxes.filter(':checked').length ) {
          $toggle.attr('checked','checked');
        }
     } else {
        //如果复选框没有选中,反选切换开关
        $toggle.removeAttr('checked');
     }
   }).eq(0).trigger('change'); //然后仅触发第一个复选框的change事件
}); //结束each()