vue如何双向绑定v-for循环出来的checkedbox和radio

问题描述

做在线答题碰头的问题(之前没做过,没什么思路!)

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

<div class="topic_list" v-if="DXTS.length !==0">
              <div class="topic_list_tit"><p>多选题</p> <span>(本类题共10分,每题3分,共30分)</span></div>
              <ul class="topic">
                <li v-for="(item1,index1) in DXTS" :key="index1">
                  <p>{{item1.topicChild.title}}</p>
                  <ul class="topic_option">
                    <li class="ty-list-li" v-for="(item,key,index) in item1.topicChild.contentMap" :key="key">
                      <div class="answer">
                        <input :id="item1.id+index" class="ty-list-input" :name="item1.id" :value="key" type="checkbox"
                               @click="topic_stateDXTS(index1,item1.id,item1.childTypeCode,key,$event)" ref="lid">
                        <label :for="item1.id+index">{{key}}</label>
                      </div>
                      <p>{{item}}</p>
                    </li>
                  </ul>
                </li>
              </ul>
            </div>

js

topic_stateDXTS(Index, practiceIdChild, childTypeCode, val, e) {
        let a = document.getElementById(practiceIdChild);
        if (e.target.checked) {  //当前checked为true的时候进来·~~
          if (!judgeRepeat(e.target.defaultValue, this.state_answer)) {   //判断用选中又取消的情况,当一样的时候不给进来~
            this.state_answer.push(e.target.defaultValue);    //添加到一个数组了,这个state_answer是选项的数据
            a.style.backgroundColor = '#f60';      //这里是修改答题卡的颜色
            a.style.color = '#fff'
          }
        } else {
          this.state_answer.pop();
          if (this.state_answer.length === 0) {  //当checkedbox没有选的时候取消答题卡的颜色
            a.style.backgroundColor = '#fff';
            a.style.color = '#333'
          }
        }
        function judgeRepeat(VALUE, obj) {
          for (let key in obj) {
            if (VALUE === obj[key]) {
              return true;
            }
          }
        }
        this.check_DXTS = this.state_answer.join(',');
        console.log(this.check_DXTS);
        /*这里如果填充数据进去的话,当用户取消选择或者选择别的也会一样push进去*/
        // obj.topicChild.push({practiceIdChild, userAnswer: this.state_answer.join(',')});
        // obj.childTypeCode = childTypeCode;
        // this.paper_data.content.push(obj);
        // console.log(this.paper_data);
      },

你期待的结果是什么?实际看到的错误信息又是什么?

我是通过上面那样来设置,发现BUG蛮多的,点击取消也会触发,这样又要判断点击数组里是否有相同值等等,总结就是神烦~~如果能通过v-model来绑定每一条题目,并且不会污染到其他题目选中的值就好了
s

请问该如何写~~~~~

阅读 3.9k
1 个回答

mvvm 框架的核心是操作数据,你代码里面就不要混进dom的操作了,至于当前这种情形,你可以定义一个object 来存储3个按钮的状态,点每一个设置对应的object 的key 就ok 了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题