Skip to content

[CheckboxGroup] max 限制可被受控值和全选绕过 #6852

Closed

Description

@zhangpaopao0609

关联

问题描述

CheckboxGroup 的 max 在两类边界下可以被绕过:

  1. maxExceeded 只判断 value.length === max,当外部受控值已经大于 max 时,未选项会重新变为可选;
  2. 全选时按变更前的 maxExceeded 判断是否停止遍历,没有按正在收集的结果限制数量。

相关源码:

const maxExceeded = computed(
  () => !isUndefined(props.max) && innerValue.value.length === props.max,
);

// getAllCheckboxValue 内
checkAllVal.add(item.value);
if (maxExceeded.value) break;

复现一:已有值超过 max

<CheckboxGroup value={['a', 'b']} max={1} options={['a', 'b', 'c']} />

点击 c 后仍会发出 ['a', 'b', 'c']。

复现二:全选

<CheckboxGroup
  max={1}
  options={[
    { label: '全选', checkAll: true },
    { label: 'A', value: 'a' },
    { label: 'B', value: 'b' },
  ]}
/>

点击全选会得到 ['a', 'b'];max={0} 时也会选中第一个普通选项。

预期结果

  • 达到或超过 max 后不能继续增加选中项;
  • 全选结果不超过 max,并正确处理 max 为 0 的情况;
  • 受控异常值不会让限制失效。

补充说明

该问题是在基于最新 develop(9e47c828a)完全重写 Checkbox 单元测试时发现。测试 PR 不修改源码,会按当前真实行为保留特征测试;源码修复时应同步更新断言。

Activity

  1. github-actions commented on Aug 1, 2026

    @github-actions
    Contributor

    👋 @zhangpaopao0609,感谢给 TDesign 提出了 issue。
    请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

  2. zhangpaopao0609 commented on Aug 1, 2026

    @zhangpaopao0609
    CollaboratorAuthor

    关联测试 PR:#6855。该 PR 不修改源码,按当前真实行为保留特征测试;源码修复时请同步更新对应断言。

  3. kyui-azusa commented on Aug 3, 2026

    @kyui-azusa
    Contributor

    我来处理这个问题,会修复受控值已达到/超过 max 时仍可继续选择,以及全选结果超过 max(含 max=0)的边界,并补充回归测试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions