使用.stop解决事件冒泡问题
原代码为
<van-radio v-for="dict in item.dicData" :key="dict.value" :name="dict.value" :disabled="isCompReadOnly" class="option" > <span class="label">{{ dict.label }}</span> <van-icon name="question-o" size="18" class="question" v-if="dict.optionTips && dict.optionTips !== ''" @click="openTip(dict.optionTips)" /> </van-radio>
但是点击icon时单选框也被默认选中了,是不符合需求的。
解决方法:增加.stop
即
<van-icon name="question-o" size="18" class="question" v-if="dict.optionTips && dict.optionTips !== ''" @click.stop="openTip(dict.optionTips)" />
问题核心是点击图标时事件冒泡到了父级单选框,导致单选框被选中。
.stop 修饰符会阻止事件冒泡,从根源上避免父元素(单选框)接收到点击事件,因此更适合解决这个问题。
.prevent 的主要作用是阻止浏览器默认行为(如表单提交、链接跳转等),而单选框的选中行为是组件内部逻辑,并非浏览器默认行为,因此 .prevent 通常无法阻止单选框被选中。
某些情况下,组件可能对事件处理做了特殊处理,此时可以同时使用 .stop 和 .prevent。

浙公网安备 33010602011771号