收藏
回答

工具BUG? 复选框组与动态类名在弹窗中无法更新状态

  • 开发者工具版本:2.01.2602032 win32-x64
  • 基础库版本:3.14.1
  • 操作系统:Windows 11 家庭中文版

预期结果:

复选框选中状态应持久保持,动态 class 应随数据更新。

实际结果:

选中状态回弹,类名未更新。


1. checkbox-group 版本代码(选中状态不持久)

WXML 片段(班级选择弹窗内):

xml

<view class="class-list">
  <checkbox-group bindchange="onClassGroupChange">
    <view wx:for="{{allClasses}}" wx:key="_id" class="class-item">
      <label>
        <checkbox value="{{item._id}}" checked="{{selectedClassIds.indexOf(item._id) > -1}}" />
        <text>{{item.displayName}}</text>
      </label>
    </view>
  </checkbox-group>
</view>

JS 对应方法:

javascript

onClassGroupChange(e) {
  const selected = e.detail.value;
  this.setData({ selectedClassIds: selected });
  console.log('selectedClassIds:', selected);
}

问题现象: 勾选复选框时,短暂出现选中标记,然后立即消失,selectedClassIds 打印为空或与勾选不符。

2. 单个 checkbox 版本代码(selectedClassIds 无值)

WXML 片段:

xml

<view class="class-list">
  <view wx:for="{{allClasses}}" wx:key="_id" class="class-item">
    <label>
      <checkbox value="{{item._id}}" checked="{{selectedClassIds.indexOf(item._id) > -1}}" bindchange="onClassCheckboxChange" data-id="{{item._id}}" />
      <text>{{item.displayName}}</text>
    </label>
  </view>
</view>

JS 对应方法:

javascript

onClassCheckboxChange(e) {
  const classId = e.currentTarget.dataset.id;
  let selected = [...this.data.selectedClassIds];
  const index = selected.indexOf(classId);
  if (index > -1) {
    selected.splice(index, 1);
  } else {
    selected.push(classId);
  }
  this.setData({ selectedClassIds: selected });
  console.log('selectedClassIds:', selected);
}

问题现象: 勾选复选框时,onClassCheckboxChange 未触发(或触发但 selectedClassIds 更新后又被重置),最终 selectedClassIds 为空。

3. 班级标签变色问题(使用动态 class 不更新)

WXML 片段(班级标签部分):

xml

<view 
  wx:for="{{classList}}" 
  wx:key="_id"
  class="class-tag {{selectedClassIds.indexOf(item._id) > -1 ? 'selected' : ''}}"
  bindtap="toggleClass"
  data-id="{{item._id}}"
  data-name="{{item.name}}"
>
  {{item.name}}
</view>

JS 对应方法:

javascript

toggleClass(e) {
  const classId = e.currentTarget.dataset.id;
  let selectedIds = [...this.data.selectedClassIds];
  const index = selectedIds.indexOf(classId);
  if (index > -1) {
    selectedIds.splice(index, 1);
  } else {
    selectedIds.push(classId);
  }
  this.setData({ selectedClassIds: selectedIds });
  console.log('selectedClassIds:', selectedIds);
}

CSS 样式:

css

.class-tag.selected {
  background: #2ecc71;
  color: white;
  /* 其他样式 */
}


回答关注问题邀请回答
收藏

1 个回答

  • 智能回答 智能回答 本次回答由AI生成
    02-15
    有用
    回复
登录 后发表内容