小程序复选框实现问卷的单选功能

小程序复选框实现问卷的单选功能

背景

环境 - 微信开发者工具Nightly v1.02.19,win10

需求 - 在小程序中做一个问卷填写页面,问卷中问题涉及到单项选择,考虑用到小程序提供的组件复选框,但是没有单项选择限制,需要自己实现其中的逻辑

UI设计

      <checkbox-group name="{{id}}" bindchange="checkboxChange">
        <label class="checkbox" wx:for="{{options}}" >
          <checkbox name="{{id}}" value="{{index}}" checked='false'/>{{item}}
        </label>
      </checkbox-group>

checkgroup代表一组复选框,其中每一个label都包含一个复选框checkbox

bindchange是绑定的事件,代表如果group中任一复选框的点击都会触发这个事件

wx:for是代表,复选框循环options的内容,即问题的四个选项,checked代表是否被选中的状态,{{item}}代表复选框具体内容

逻辑实现

checkboxChange: function(e) {
    var selected = e.detail.value;
    if (selected.length > 1) {
      var optionalAnswers = this.data.task.questionList[2].optionalAnswers;
      for (var i = 0; i < optionalAnswers.length; ++i) {
	   var isChecked = 'task.questionList[2].optionalAnswers[' + i + '].isChecked'
        if (i == selected[selected.length - 1]) {
          this.setData({
            [isChecked]: true
          })
        } else {
          this.setData({
            [isChecked]: false
          })
        }
      }
    }
  }

整体思路 - 因为每一次点击都会触发bingchange中的事件,我们可以在此事件中处理,如果选中的数量>1,那么遍历所有的复选框,将刚刚选择的复选框状态设置成true,其他所有复选框状态设置成false,那么就可以保证每次只能有一个被选中

具体代码实现如上,逻辑还是比价简单的

着重强调两个技巧

var isChecked = 'task.questionList[2].optionalAnswers[' + i + '].isChecked' 可以通过加法的形式实现内容结合变量的string化

[isChecked]: true string化需要加上中括号才能正确赋值

效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值