elementUI的select切换单选和多选,报错Cannot read property value of undefined

    如题,在使用el-select时,发现切换单选和多选,会报错,单独使用是正常的,从多选切换到单选也是可以的,但是从单选切换到多选,就会报上述错误。

我是弹框里面要根据下拉来切换单选和多选的:

<el-dialog
        :title="titleMap[currentType]"
        :visible.sync="dialogFormVisible" >
          <div style="width:80%;margin: 0 auto">
            <el-form :model="ruleForm" status-icon ref="ruleForm" :inline="false" label-width="90px" class="demo-ruleForm">
                <el-form-item label="题目类型">
                  <el-select v-model="activeName" placeholder="请选择题型" @blur="changeType">
                    <el-option
                      v-for="item in options"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="题目" prop="questionContent" :rules="[{ required: true, message: '请输入题目'},{ min: 1, max: 200, message: '长度在 1 到 200 个字符'}]">
                  <el-input type="textarea" placeholder="输入题目,如:从计算机网络系统组成的角度看,计算机网络可以分为()和()。注意需要考生答题部分一定要用括号(英文半角)括起来。"
                      auto-complete="off" v-model="ruleForm.questionContent"></el-input>
                </el-form-item>
                <!-- 填空题 -->
                <template v-if="activeName=='first'">
                  <el-form-item label="正确答案" prop="questionAnswer" :rules="[{ required: true, message: '请输入题目'},{ min: 1, max: 100, message: '长度在 1 到 100 个字符'}]">
                    <el-input  type="text" placeholder="每两个个空之间的答案用英文逗号分隔" auto-complete="off" v-model="ruleForm.questionAnswer"></el-input>
                  </el-form-item>
                </template>
                <!-- 判断题 -->
                <template v-if="activeName == 'second'" >
                  <el-form-item label="正确答案" prop="questionAnswer" :rules="{ required: true, message: '请选择答案', trigger: 'change' }">
                    <el-select v-model="ruleForm.questionAnswer" filterable placeholder="请选择答案">
                      <el-option
                        v-for="item in judgeOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id">
                      </el-option>
                   </el-select>
                  </el-form-item>
                </template>
                <!-- 单选、多选公共部分 -->
               <template v-if="activeName == 'third' || activeName == 'fourth'" >
                 <el-form-item label="选项A" prop="choiceA" :rules="[{ required: true, message: '输入选项内容'},{ min: 1, max: 100, message: '长度在 1 到 100 个字符'}]">
                   <el-input  type="text" placeholder="输入选项内容" auto-complete="off" v-model="ruleForm.choiceA"></el-input>
                 </el-form-item>
                 <el-form-item label="选项B" prop="choiceB" :rules="[{ required: true, message: '输入选项内容'},{ min: 1, max: 100, message: '长度在 1 到 100 个字符'}]">
                   <el-input  type="text" placeholder="输入选项内容" auto-complete="off" v-model="ruleForm.choiceB"></el-input>
                 </el-form-item>
                 <el-form-item label="选项C" prop="choiceC" :rules="[{ required: true, message: '输入选项内容'},{ min: 1, max: 100, message: '长度在 1 到 100 个字符'}]">
                   <el-input  type="text" placeholder="输入选项内容" auto-complete="off" v-model="ruleForm.choiceC"></el-input>
                 </el-form-item>
                 <el-form-item label="选项D" prop="choiceD" :rules="[{ required: true, message: '输入选项内容'},{ min: 1, max: 100, message: '长度在 1 到 100 个字符'}]">
                   <el-input  type="text" placeholder="输入选项内容" auto-complete="off" v-model="ruleForm.choiceD"></el-input>
                 </el-form-item>
               </template>
               <!-- 单选 -->
               <template v-if="activeName == 'third'">
                 <el-form-item  label="正确答案" prop="questionAnswer" :rules="{ required: true, message: '请选择答案', trigger: 'change' }">
                   <el-select v-model="ruleForm.questionAnswer" filterable placeholder="请选择答案">
                     <el-option
                       v-for="item in singleOptions"
                       :key="item.id"
                       :label="item.name"
                       :value="item.id">
                     </el-option>
                  </el-select>
                 </el-form-item>
               </template>
               <!-- 多选 -->
               <template v-if="activeName == 'fourth'">
                 <el-form-item  label="正确答案" prop="multi" :rules="{ required: true, message: '请选择答案', trigger: 'change' }">
                   <el-select multiple v-model="ruleForm.multi" filterable placeholder="请选择答案">
                     <el-option
                       v-for="item in MultiOptions"
                       :key="item.name"
                       :label="item.name"
                       :value="item.id">
                     </el-option>
                  </el-select>
                 </el-form-item>
               </template>
                <el-form-item label="题目难度" prop="questionLevel" :rules="[{ required: true, message: '请选择题目难度', trigger: 'change' }]">
                  <el-select v-model="ruleForm.questionLevel" filterable placeholder="请选择">
                    <el-option
                      v-for="item in levels"
                      :key="item.id"
                      :label="item.name"
                      :value="item.id">
                    </el-option>
                 </el-select>
                </el-form-item>
                <el-form-item label="答案解析" prop="questionExplain" :rules="[{max: 200, message: '最多输入 200 个字符',trigger: 'blur' }]">
                  <el-input type="textarea" placeholder="解析答案,方便理解" auto-complete="off" v-model="ruleForm.questionExplain"></el-input>
                </el-form-item>
              </el-form>
           </div>
           <div slot="footer" class="dialog-footer">
             <el-button @click="dialogFormVisible = false">取 消</el-button>
             <el-button type="primary" @click="submitForm('ruleForm')">确 定</el-button>
           </div>
   </el-dialog>

想法是,根据题目类型,来切换单选和多选

试了很多方法都不行,最后使用select的失去焦点事件解决的

在单选将要切换到多选时(或者其他选项,这里主要讨论单选和多选),清空单选的下拉选择的内容:

    changeType(val){
      // let t = this.activeName
      debugger
      // 要清除单选的值,不然切换到多选时只能 只读,不能修改,
      this.ruleForm.questionAnswer = ''
      // console.log("当前值 "+val)

    }

问题就解决了。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值