一、需求:
点击一个选项,让其出现不同于其他选项的样式,比如选项文字的颜色变红。
二、初步解决方案:
可以设置一个活跃选项的数据来记录选中选项的下标(默认为0),其次选中其他选项时可以通过点击事件获取到所选选项的下标,并赋值给活跃选项。要点击的选项是 wx:for 循环出来的,所以接下来就是通过一个三元运算来判断每个循环的元素是否被选中,选中则加特殊样式。
js:
cateActive: '0', // 活跃选项下标
clickCate(e) {
console.log(e)
this.setData({
cateActive: e.currentTarget.dataset.index
})
},
wxml:
<view class='task_cate'>
<view wx:for='{{cateArr}}' class='cate_item' wx:key='cate' bindtap='clickCate'>
<view class='cate_icon'><image src='../../images/{{item.icon}}.png'></image></view>
<view class='cate_text {{index == cateActive ? "cate_text_active" : ""}}'>{{item.text}}</view>
</view>
</view>
果不其然,出现问题了。不管怎么点击,只有第一个选项是红色的。

经过排查,看到控制台的信息如下:

可以看出,currentTarget.dataset中并没有我们所需要的值。通过查阅资料,使用 data-index 可以将选项的下标值通过事件对象(event)反馈给函数,也就是 e 。
三、最终解决方案:
在初步解决方案的基础上,在标签中定义 data-index='{{index}}',使得选项下标值可以通过事件对象(event)被点击函数获取到。

通过这个小小的改动即可成功解决。

四、总结:
原以为,点击的选项是 wx:for 循环出来的,可以直接通过 {{index}} 来做三元运算,但是事件对象(event)并不会通过这样的方式返回给函数,必须依靠 data-index='{{index}}'。
本文详细记录了解决微信小程序中点击选项样式不变的问题。通过设置活跃选项的数据并利用三元运算判断选中状态,尝试修改选项颜色。然而,发现currentTarget.dataset无法获取到所需值。最终通过添加data-index属性,成功从事件对象中获取选项下标,实现了点击选项颜色变红的功能。这一过程强调了在微信小程序中事件处理与数据绑定的正确结合方式。
1733

被折叠的 条评论
为什么被折叠?



