微信小程序 checkbox 实现双向绑定以及特殊交互处理

wxml文件代码如下:

<!--页面顶部 引入wxs文件-->
<wxs module="tools" src="../../filter/tools.wxs"></wxs>
...
<checkbox-group bindchange="checkboxChange">
  <label class="weui-cell weui-check__label" wx:for="{{cancerItems}}" wx:key="value">
    <view class="weui-cell__hd">
      <checkbox value="{{item.value}}" checked="{{tools.getIncludes(checkedCancers, item.value)}}"/>
    </view>
    <view class="weui-cell__bd">{{item.name}}</view>
  </label>
</checkbox-group>

js代码如下:

Page({
	data: {
		// 癌种
		cancerItems: [
		  {value: 'fou', name: '否'},
		  {value: 'fei', name: '肺癌'},
		  {value: 'ruxian', name: '乳腺癌'},
		  {value: 'wei', name: '胃癌'},
		  {value: 'gan', name: '肝癌'},
		  {value: 'qita', name: '其他'}
		],
		checkedCancers: [], // 选择的癌种
	},
	checkboxChange (event) {
	  console.log('event', event)
	  let checkedVal = event.detail.value
	  if (checkedVal[checkedVal.length - 1] === 'fou') { // 如果用户选择了“否”,则其他癌种清空
	    checkedVal = ['fou']
	  } else { // 如果选择癌种或者“其他”,“否”取消选择
	    const index = checkedVal.indexOf('fou')
	    if (index > -1) {
	      checkedVal.splice(index, 1)
	    }
	    if (checkedVal.includes('fou')) { // 如果选择“其他”
	      //
	    }
	  }
	  this.setData({
	    checkedCancers: checkedVal
	  })
	}
})

所谓tool.getIncludes 方法需要 引入 tool.wxs 文件
文件代码如下:

var tools = {
	getIncludes: function(val, target) {
	    if(!val) return
	    if(val.indexOf(target) > -1) {
	      	return true
	    } else {
	      	return false
	    }
	}
}
module.exports = {
	getIncludes: tools.getIncludes
}

注:微信小程序提到:WXS(WeiXin Script)是内联在 WXML 中的脚本段。通过 WXS 可以在模版中内联少量处理脚本,丰富模板的数据预处理能力。另外, WXS 还可以用来编写简单的 WXS 事件响应函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序中,可以通过使用 `<checkbox>` 组件来实现复选框。以下是一个简单的示例: ```html <checkbox-group> <label wx:for="{{items}}"> <checkbox value="{{item.value}}" checked="{{item.checked}}" bindchange="checkboxChange">{{item.name}}</checkbox> </label> </checkbox-group> ``` 以上代码中,`<checkbox-group>` 标签用来包含多个 `<checkbox>` 组件,`<label>` 标签用来作为 `<checkbox>` 的容器,`wx:for` 属性用来遍历一个数组来生成多个 `<checkbox>`,`value` 属性用来设置每个 `<checkbox>` 的值,`checked` 属性用来设置每个 `<checkbox>` 是否选中,`bindchange` 属性用来绑定选中状态改变时的事件处理函数。 在 JavaScript 中,可以通过以下方式获取所有选中的复选框的值: ```js const checkedValues = wx.getStorageSync('checkboxGroup') || []; Page({ data: { items: [ { name: '选项1', value: 'value1', checked: checkedValues.includes('value1') }, { name: '选项2', value: 'value2', checked: checkedValues.includes('value2') }, { name: '选项3', value: 'value3', checked: checkedValues.includes('value3') }, ] }, checkboxChange: function(e) { const checkedValues = e.detail.value; wx.setStorageSync('checkboxGroup', checkedValues); this.setData({ 'items': this.data.items.map(item => { item.checked = checkedValues.includes(item.value); return item; }) }); } }); ``` 以上代码中,`wx.getStorageSync()` 方法用来获取之前已经选中的复选框的值,`e.detail.value` 属性用来获取当前选中的复选框的值,`wx.setStorageSync()` 方法用来保存当前选中的复选框的值。在 `checkboxChange` 事件处理函数中,首先获取当前选中的复选框的值,然后将其保存到本地存储中,并且更新 `data` 中的 `items` 数组,以便页面显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值