- 开发者工具版本: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;
/* 其他样式 */
}
