为elment-ui的el-select选择器添加onblur失焦事件产生的问题

                <div class="oneline">
                    <span >用户编号:</span>
                    <div class="block left">
                        <el-select
                        :no-match-text="msg"
                        :popper-append-to-body=false
                        placeholder='请选择'
                        v-model="value" filterable popper-class='contentadd_select' 
                        ref='select'>
                            <el-option
                                v-for="item in users"
                                :key="item.accont"
                                :label="item.accont"
                                :value="item.accont">
                            </el-option>
                        </el-select>
                    </div>
                </div>

所需要实现的功能是当查询输入时,如果用户输入的数据是选项里面不匹配的,则返回显示无匹配数据。

JS代码如下

this.$refs.select.$refs.reference.$refs.input.onblur = ()=>{
             let haveitem=0;
                for(let i=0;i<this.users.length;i++){
                    if(this.$refs.select.query==this.users[i].accont){
                        haveitem++;
                    }
                }
                if(!haveitem){
                    this.value='无匹配数据'
                    // this.msg=' '
                }
        }

上述代码的this.$refs.select.query是选择器输入时查询框绑定的值。

选择器属性有filterable属性时为可查询选择。

使用开发者工具测试时发现el-select选择器数据绑定的对象value跟查询输入时的数据对象不是同一个,然后查看el-select源码得知查询输入时的数据绑定在select.query上。

本来el-select有个blur事件绑定函数属性。但是使用后发现有时候失焦事件并不能触发生效,也就导致所绑定的函数不能执行。

看了源码得知blur这个事件函数有个定时器什么的,看不太懂,但是知道不是浏览器原生的失焦事件。

于是用vue的ref定位到该选择器来实现绑定原生onblur事件,则可以避免这个问题。

也可以使用操作dom查询利用选择器定位到这个选择器进行失焦事件绑定。

猜你喜欢

转载自blog.csdn.net/q275757160/article/details/87634255
今日推荐