记录开发时select多选和select自定义事件冒泡问题的解决方法

474 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

问题1-select多选时一开始就触发form表单rules表单校验规则问题

问题描述:使用form表单的校验规则,即rules表单验证规则。当select为多选时,打开页面就会触发校验规则。一般是点击确定按钮才会触发校验规则。

image.png

原因:select设置multiple属性后,v-model接收的应该是一个数组,初始值也应该是个空数组。

value是多选select的v-model绑定的值,我是在设置初始值时,是这样的:

<el-form-item label="下拉框" prop="value">
    <el-select v-model="ruleForm.value" size="small" multiple collapse-tags style="margin-left: 20px" placeholder="请选择下拉框">
        <el-option v-for="item in valueList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
    </el-select>
</el-form-item>
...
data() {
    return {
        ruleForm: {
            value: '',
            desc: ''
        },
        valueList: [
            {
                value: '姓名',
                label: '姓名'
            },
            {
                value: '电话',
                label: '电话'
            }
        ],
        rules: {
            value: [{ required: true, message: '请选择下拉框', trigger: 'change' }],
            desc: [{ required: true, message: '请输入描述', trigger: 'blur' }]
        }
    };
},
...

这样设置,当选择多个值后,value也会是一个数组。但是就是会自动触发校验规则。所以将value的初始值设置为一个空数组。

...
ruleForm: {
    name: '',
    value: []
}
...

解决方法:将多选select的v-model绑定的初始值设置为空数组。

element-ui中select的官网地址:element.eleme.cn/#/zh-CN/com…

问题2-select自定义时,点击option中的操作按钮时会触发成功但是下拉框收起显示选择的option的值。

问题描述:在自定义select下拉框时,每个option都有一个删除和编辑按钮,但是点击对应按钮时,方法能调用,但是下拉框会搜索并显示点击的那一行的option的值。

image.png

原因:因为option也是点击选择,所以出现了事件冒泡,在点击编辑或者删除时,事件会向上冒泡。

解决方法:删除和编辑点击时,使用@click.stop,阻止事件冒泡。