如题,在使用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)
}
问题就解决了。。。