vue下拉输入框、element ul下拉选择框
- 结果如下 可以模糊匹配下拉项的值还可以输入其他值
(或者 element ui input输入框里的:带输入建议、自定义模板、远程搜索例子也可以实现此功能(如果需求不是必须要输入框后面有下拉框的箭头就可以使用官网的))

- 代码如下
<template>
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="名称">
<el-select v-model="form.value" style="width: 312px;" ref="valSelect" filterable @blur="valSelectBlur" @focus="valSelectFocus"
@change="valSelectChange">
<el-option v-for="item in options" :key="item" :label="item" :value="item">
</el-option>
</el-select>
<el-input v-model="form.name" style="width: 280px;position: absolute;left: 0px;" @blur="valInputBlur" ref="valInput"
@focus="valInputFocus"></el-input>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
form: {
name: "",
value: ''
},
options: [],
optionsAll: ['黄金糕', '双皮奶', '蚵仔煎', '龙须面', '北京烤鸭', '黄金面', '奶煎鸭'],
inputOneFocus: true,
valSelectFocusVal: false,
valInputFocusVal: false,
}
},
watch: {
"form.name": function(val) {
var data = [];
for (var i = 0; i < this.optionsAll.length; i++) {
if (this.optionsAll[i].indexOf(val) >= 0 || val == 0) {
data.push(this.optionsAll[i]);
}
}
this.options = data;
this.$refs.valSelect.focus();
}
},
methods: {
valSelectFocus() {
this.valSelectFocusVal = true;
this.$refs.valInput.focus();
},
valSelectBlur() {
this.valSelectFocusVal = false;
},
valSelectChange(val) {
this.valSelectFocusVal = false;
this.form.name = val;
},
valInputBlur() {
let that = this;
that.valInputFocusVal = false;
if (that.optionsAll.indexOf(that.form.name) >= 0) {
setTimeout(() => {
if (that.valSelectFocusVal == false && that.valInputFocusVal == false) {
console.log("输入值在下拉项中存在");
that.inputOneFocus = true;
}
}, 100)
}else{
setTimeout(() => {
if (that.valSelectFocusVal == false && that.valInputFocusVal == false) {
console.log("zzz");
that.inputOneFocus = true;
}
}, 500)
}
},
valInputFocus() {
this.valInputFocusVal = true;
this.form.value = this.form.name;
if(this.inputOneFocus){
this.inputOneFocus = false;
var data = [];
for (var i = 0; i < this.optionsAll.length; i++) {
if (this.optionsAll[i].indexOf(this.form.name) >= 0 || this.form.name == 0) {
data.push(this.optionsAll[i]);
}
}
this.options = data;
setTimeout(() => {
this.$refs.valSelect.focus();
}, 200)
}
}
}
}
</script>