v-autocomplete开启multiple时blur事件$event.target.value为空如何解决?
你的临时解决方式不符合规范,问题和正确实现如下:
问题原因
- 直接解析DOM innerText的方式高度依赖v-autocomplete的内部渲染结构,只要Vuetify版本迭代调整了组件的DOM层级、chip渲染格式,你的代码就会直接失效。同时如果选项值本身包含换行、空格等特殊字符,或者后续为组件新增图标、插槽等自定义内容,拆分innerText得到的结果会和实际选中值不一致,稳定性极差。
- 开启
multiple属性后$event.target.value为空是组件的正常设计逻辑:多值模式下v-autocomplete内部的原生input仅用于输入搜索关键词,不会把选中的多值数组同步到原生input的value属性上,所以读取原生target.value自然返回空。
正确实现方式
Vuetify表单组件遵循Vue双向绑定规范,使用v-model代替单向的:value绑定选中值,blur事件触发时直接读取绑定的变量即可,不需要操作原生事件对象。
修正后的模板代码:
<template v-slot:item.fieldName="{ item }"> <v-autocomplete multiple small-chips v-model="item.fieldName" :items="items" color="primary" @blur="updateItem(item, item.fieldName, 'fieldName')" > </v-autocomplete> </template>
如果因为业务逻辑需要保留单向绑定,也可以监听@input(Vuetify 2)或@update:model-value(Vuetify 3)事件实时同步选中值到本地变量,blur时直接读取本地变量即可。
内容的提问来源于stack exchange,提问作者emdou
相关产品推荐
相关产品推荐

