- checkbox组件,鼠标放到方框里面,等到方框border变成蓝色 (注意:一定要在方框里面点,点方框旁边是正常的)
第一次点击,正常选中 - 第二次点击,正常取消选中,同时控制台有报错
- 第三次点击,页面没用反应 ----> 正常应该是变成选中
- 第4次点击, 页面正常选中
- 发布:2022-06-24 16:45
- 更新:2022-12-07 00:41
- 阅读:597
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: Windows10
HBuilderX类型: 正式
HBuilderX版本号: 3.4.15
浏览器平台: Chrome
浏览器版本: 103.0.5060.53(正式版本) (64 位)
项目创建方式: HBuilderX
操作步骤:
预期结果:
每次点击都应该把checkbox变成另外一个状态,但第三次点击时,页面没反应
每次点击都应该把checkbox变成另外一个状态,但第三次点击时,页面没反应
实际结果:
每次点击都应该把checkbox变成另外一个状态,但第三次点击时,页面没反应
每次点击都应该把checkbox变成另外一个状态,但第三次点击时,页面没反应
bug描述:
checkbox组件,鼠标放到方框里面,等到方框border变成蓝色,第一次点击会选中,这时候再点一下,会取消选中,同时控制台有报错
(注意:一定要在方框里面点,点方框旁边是正常的)
Uncaught TypeError: Cannot destructure property 'id' of 'el' as it is null.
at normalizeTarget (uni-shared.es.js:487:13)
at createNativeEvent (uni-h5.es.js:1269:13)
at $nne (uni-h5.es.js:1243:15)
at HTMLElement.invoker (vue.runtime.esm.js:9534:19)
l***@126.com (作者)
我给checkbox加了click.stop就好了
- 点击方框触发了checkbox本身的click事件,修改了checkbox内部的状态
- 事件继续向上传播,父元素的click处理器又触发了checkedNodesMap.set(x, x)
- 由于checkedNodesMap是一个响应式对象,又会触发设置checkbox的checked
- checkbox内部应该是有watch checked这个props,就又触发了一些动作
- 但这时候checkbox已经是选中状态了,内部数据状态的不一致,导致报错
作为一个半路出家的前端,坑了坑了
l***@126.com (作者)
抱歉,应该不是checkbox有bug,是我自己用法有问题
<view class="uni-panel" v-for="x in [1, 2, 3]" :key="x">
<view class="uni-panel-h" @click="checkedNodesMap.set(x, x)">
<view class="flex-space-between">
<checkbox :checked="checkedNodesMap.has(x)" />
</view>
</view>
</view>
这是一小段能触发报错的代码,还是想请假下大佬,为什么这么写会报错?
2022-06-24 17:32
BoredApe
回复 l***@126.com: 请上传能重现问题的测试工程。没有上下文不好确定问题
2022-06-24 17:36