Loading

微信小程序button选中改样式-实现单选/多选

小程序实现多button单选/多选

红色为选中状态

单选

多选

①wxss

/* pages/button-select/button-select.wxss */

.button_container{
  display: flex;
  flex-direction: row;
  justify-content: space-around
}
/* 按钮未选中 */
.normal_button{
  background: greenyellow
}
/* 按钮选中 */
.checked_button{
  background: red;
  color: white
  
}

②wxm

样式选中改变是通过三元运算符实现的

<!--pages/button-select/button-select.wxml-->
<view class='button_container'>
  <block wx:for="{{buttons}}" wx:key="buttons">
  <button class='{{item.checked?"checked_button":"normal_button"}}' data-id='{{item.id}}' bindtap='radioButtonTap'>{{item.name}}</button>
  </block>
</view>
<text>{{msg}}</text>

③js

Page({...})中填充按钮数据

data: {
    buttons: [{ id: 1, name: '银色' }, { id: 2, name: '白色' }, { id: 3, name: '黑色' }],
    msg:'',
  },

默认使第一个按钮被选中Page({...})

onLoad: function (options) {
    this.data.buttons[0].checked = true;
    this.setData({
      buttons: this.data.buttons,
    })
  },

Page({...})中添加事件监听方法(单选)

/**
 * 事件监听,实现单选效果
 * e是获取e.currentTarget.dataset.id所以是必备的,跟前端的data-id获取的方式差不多
 */
radioButtonTap: function (e) {
    console.log(e)
    let id = e.currentTarget.dataset.id
    console.log(id)
    for (let i = 0; i < this.data.buttons.length; i++) {
      if (this.data.buttons[i].id == id) {
        //当前点击的位置为true即选中
        this.data.buttons[i].checked = true;
      }
      else {
        //其他的位置为false
        this.data.buttons[i].checked = false;
      }
    }
    this.setData({
      buttons: this.data.buttons,
      msg: "id:"+id
    })
  },

Page({...})中添加事件监听方法(多选)

记得在wxml中修改绑定方法bindtap='radioButtonTap'

  checkButtonTap:function(e){
    console.log(e)
    let id = e.currentTarget.dataset.id
    console.log(id)
    for (let i = 0; i < this.data.buttons.length; i++) {
      if (this.data.buttons[i].id == id) {
        if (this.data.buttons[i].checked == true) {
          this.data.buttons[i].checked = false;
         
        } else {
          this.data.buttons[i].checked = true;
          
        }
      }
    }
   this.setData({
     buttons: this.data.buttons,
     msg: "id:"+id
    })
    
  },
posted @ 2019-01-17 19:39  李帆1998  阅读(9209)  评论(1编辑  收藏  举报