解决思路:
监听tab事件,然后把select的input输入框的值push到它绑定的值上。
1.获取dom就不说了
2.定义一个临时变量来存储select输入框的值,通过监听来存储
const tempTo = ref("");
const tabLastTime = ref();
watch(
() => toRef.value?.query,
(n) => {
if (n) {
tempTo.value = n;
}
tabLastTime.value = Date.now();
}
);
tabLastTime变量是用来判断按下失去焦点和按下tab键的间隔的,因为会有一个bug,在select框里输入数据后再删除,再tab,会出现把删除之前的数据输入的问题。
3.监听tab事件
<el-select
ref="toRef"
v-model="model.to"
class="w-480px"
multiple
filterable
allow-create
remote
:popper-append-to-body="false"
default-first-option
:reserve-keyword="false"
:placeholder="t('mail.recipients')"
@keydown.tab="tabEnter"
>
4.在方法里调用,把select输入框的值push到输入框绑定的数据里,然后记得清空。await form。validate是因为不知道为什么他失去焦点触发的表单验证会失效,,所以我只能手动触发。
const tabEnter = async function () {
if (Date.now() - tabLastTime.value < 50) {
model.value.to.push(tempTo.value);
await form.value?.validateField("to");
}
tempTo.value = "";
};