【element-ui BUG】在autocomplete组件中使用clearable的bug

726 阅读1分钟

autocomplete中的属性

trigger-on-focus

该属性为 false 的时候,输入框聚焦时不会出现搜索框

clearable

该属性为 true 的时候,可出现清除按钮,可清除输入框内容

1659694156(1).png

问题

在使用 element-ui 中,在 autocomplete 组件中同时添加 clearable 和 :trigger-on-focus="false" ,搜索框清除后,第二次输入内容将不会弹出搜索框,需要失焦后再聚焦 搜索框才能生效

1659694003(1).png

解决方案

方案一:手动调用失焦事件

image.png

从 element 的 autocomplete 中可以看出 input的 clear 事件触发后 ,autocomplete 的 activated 属性会被修改,并触发 clear 方法,因此可以从 clear 方法中手动还原autocomplete的状态

组件添加 clear 事件,在 clear 事件中调用

document.activeElement.blur()

调用 document 中 active 元素的失焦事件

方案二:手动调用 autocomplete 中 input 组件的 clear 事件

image.png

从 element 的 input 中,清除是调用了 clear 事件,只要我们自定义一个清除按钮,并直接调用 clear 方法,即可模拟 clear,完成清除功能,而且并不会有副作用

image.png

先从 input 自带的 suffix 插槽中插入 清除 icon (也可按需求将icon设置为其他icon),点击icon时触发事件执行以下代码

this.$refs.autocomplete.$children[0].clear();

remarks

对于以上插件或第三方库源码的问题,我们应尽量不修改源码去解决问题,在外部通过一些方法来避开bug出现的情况, polyfill 或者 修改源码 的方法或许会发生未知的影响