You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复选框三种状态实现及ts函数未定义错误修复求助

解决三种状态复选框的样式替换与JS未定义错误

我来帮你搞定这两个问题——先修复JSFiddle里的ts is not defined报错,再把CodePen里的横线替换成方框,完美实现「空状态→方框→勾选」的三态复选框。


一、修复Uncaught ReferenceError: ts is not defined错误

这个报错的核心原因是内联onclick="ts(this)"找不到全局作用域的ts函数。解决方法有两种,推荐更规范的第二种:

方案:改用JS绑定事件(替代内联属性)

  1. 先把HTML里的内联onclick属性删掉,避免依赖全局作用域
  2. 在JS里通过addEventListener绑定点击事件,确保ts函数能被正确调用

完整的ts函数应该处理三种状态的循环切换,代码如下:

function ts(cb) {
  if (cb.readOnly) return;
  
  // 循环逻辑:空 → 方框 → 勾选 → 空
  if (!cb.checked && !cb.indeterminate) {
    cb.indeterminate = true; // 切换到方框状态
  } else if (cb.indeterminate) {
    cb.checked = true; // 切换到勾选状态
    cb.indeterminate = false;
  } else {
    cb.checked = false;
    cb.indeterminate = false; // 回到空状态
  }
}

// 给所有三态复选框绑定点击事件
document.querySelectorAll('.tri-state-checkbox').forEach(cb => {
  cb.addEventListener('click', function() {
    ts(this);
  });
});

二、把横线替换为方框样式(修改CSS)

原来的CodePen用伪元素画了横线,现在我们改成方框样式,针对三种状态分别设置:

/* 隐藏浏览器默认的复选框样式 */
.tri-state-checkbox {
  appearance: none;
  -webkit-appearance: none;
  width: auto;
  margin: 0;
  cursor: pointer;
}

/* 空状态:浅灰色空方框 */
.tri-state-checkbox::before {
  content: '';
  display: inline-block;
  width: 18px;
  height: 18px;
  border: 2px solid #ccc;
  border-radius: 2px;
  background: transparent;
  margin-right: 8px;
  position: relative;
  top: 3px;
  transition: border-color 0.2s;
}

/* 方框状态(半选):深灰色空方框 */
.tri-state-checkbox:indeterminate::before {
  border-color: #333;
}

/* 勾选状态:带对勾的深灰色方框 */
.tri-state-checkbox:checked::before {
  content: '✓';
  font-size: 16px;
  font-weight: bold;
  color: #333;
  border-color: #333;
  text-align: center;
  line-height: 18px;
}

/*  hover时的交互反馈 */
.tri-state-checkbox:hover::before {
  border-color: #666;
}

完整可运行代码示例

HTML

<label>
  <input type="checkbox" class="tri-state-checkbox">
  三态复选框示例
</label>

CSS(上面的样式代码)

JS(上面的逻辑代码)


效果说明

点击复选框会按以下顺序循环切换:

  1. 空状态:浅灰色边框的空方框
  2. 方框状态:深灰色边框的空方框(对应indeterminate属性)
  3. 勾选状态:带加粗对勾的深灰色方框

内容的提问来源于stack exchange,提问作者user9502376

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:29:07