Skip to content

Checkbox 复选框

复选框组件,用于选择一个或多个选项。

基础用法

简单的复选框。

html
<div id="demo-checkbox"></div>

<script>
const checkbox = new SaCheckbox('#demo-checkbox', {
  label: '选项一',
  value: 'option1',
  checked: false,
  onChange: (checked, value) => {
    console.log('选中:', checked, value);
  }
});

SA.init('body');
</script>
加载 SanoUI 组件中...
            
          

多选框组

创建多个复选框。

html
<div id="demo-checkbox-group"></div>

<script>
const container = document.getElementById('demo-checkbox-group');
['选项一', '选项二', '选项三'].forEach((label, index) => {
  const checkboxEl = document.createElement('div');
  checkboxEl.style.marginBottom = '12px';
  container.appendChild(checkboxEl);
  new SaCheckbox(checkboxEl, {
    label: label,
    value: `option${index + 1}`,
    checked: index === 0,
    onChange: (checked, value) => {
      console.log('选中:', checked, value);
    }
  });
});

SA.init('body');
</script>
加载 SanoUI 组件中...
            
          

半选状态

通过 indeterminate: true 设置半选状态。

html
<div id="demo-checkbox-indeterminate"></div>

<script>
const checkbox = new SaCheckbox('#demo-checkbox-indeterminate', {
  label: '半选状态',
  value: 'indeterminate',
  indeterminate: true
});

SA.init('body');
</script>
加载 SanoUI 组件中...
            
          

自动初始化

使用 SA.init() 可以自动初始化所有带有 class="sa-checkbox" 的复选框组件。

html
<div>
  <label class="sa-checkbox" data-checkbox="true" data-label="选项一" data-value="option1"></label>
</div>
<div style="margin-top: 12px;">
  <label class="sa-checkbox" data-checkbox="true" data-label="选项二" data-value="option2" data-checked="true"></label>
</div>
<div style="margin-top: 12px;">
  <label class="sa-checkbox" data-checkbox="true" data-label="选项三" data-value="option3"></label>
</div>

<script>
// 使用 SA.init() 自动初始化所有组件
const page = SA.init('body');

// 复选框组件已自动初始化,所有带有 class="sa-checkbox" 的元素都会被处理

// 复选框组件通常不需要手动初始化,直接使用 HTML 类名即可
</script>
加载 SanoUI 组件中...
            
          

API

构造函数

javascript
new SaCheckbox(container, config)

参数

参数说明类型默认值
container容器选择器或元素string | HTMLElement-
config配置选项SaCheckboxOptions{}

配置选项

参数说明类型默认值
label标签文本string''
value选项值string | number-
checked是否选中booleanfalse
indeterminate是否半选状态booleanfalse
disabled是否禁用booleanfalse
onChange状态变化回调function(checked: boolean, value: any): voidnull

Data 属性

属性说明类型默认值
data-checkbox启用自动初始化boolean-
data-label标签文本string''
data-value选项值string-
data-checked是否选中booleanfalse
data-disabled是否禁用booleanfalse

方法

方法名说明参数返回值
setChecked(checked)设置选中状态checked: booleanvoid
getChecked()获取选中状态-boolean
getValue()获取选项值-any
setDisabled(disabled)设置禁用状态disabled: booleanvoid
destroy()销毁实例-void

实际使用场景

场景 1:全选功能

使用复选框实现全选/取消全选功能。

html
<div style="margin-bottom: 1rem;">
  <label class="sa-checkbox" id="select-all" data-checkbox="true" data-label="全选" data-value="all"></label>
</div>

<div id="checkbox-list"></div>

<script>
  SA.init('body');
  
  const items = ['选项一', '选项二', '选项三', '选项四', '选项五'];
  const checkboxes = [];
  
  items.forEach((label, index) => {
    const container = document.createElement('div');
    container.style.marginBottom = '0.5rem';
    document.getElementById('checkbox-list').appendChild(container);
    
    const checkbox = new SaCheckbox(container, {
      label: label,
      value: `option${index + 1}`,
      onChange: () => {
        updateSelectAll();
      }
    });
    
    checkboxes.push(checkbox);
  });
  
  const selectAll = document.getElementById('select-all')._saCheckboxInstance;
  
  selectAll.config.onChange = (checked) => {
    checkboxes.forEach(cb => cb.setChecked(checked));
  };
  
  function updateSelectAll() {
    const allChecked = checkboxes.every(cb => cb.getChecked());
    const someChecked = checkboxes.some(cb => cb.getChecked());
    
    if (allChecked) {
      selectAll.setChecked(true);
    } else if (someChecked) {
      selectAll.setChecked(false);
      selectAll.input.indeterminate = true;
    } else {
      selectAll.setChecked(false);
      selectAll.input.indeterminate = false;
    }
  }
</script>
加载 SanoUI 组件中...
            
          

Released under the MIT License.