el-select 輸入下拉搜索,匹配不到數據時也保留輸入值,同時input獲取焦點時保留其value值


需要注意的地方

1. 為了在匹配不到數據時也保留其輸入的值,可以用 filter-method 自定義篩選

2. el-select添加上filterable之后,點擊展開,點擊收起,會導致focus和blur事件不觸發,但點擊頁面其他地方才可正常觸發 ,可利用visible-change 事件來解決些問題

3. input獲取焦點時保留其value值用focus事件做相關賦值處理

具體實現代碼如下

 1 <template>
 2   <el-select id="selectInput" v-model="value" filterable placeholder="請選擇" ref="searchSelect" :filter-method="dataFilter" @visible-change="visibleChange" @focus="selectFocus" @blur="selectBlur" @change="selectChange">
 3     <el-option
 4       v-for="item in options"
 5       :key="item.value"
 6       :label="item.label"
 7       :value="item.value">
 8     </el-option>
 9   </el-select>
10 </template>
11 
12 <script>
13   export default {
14     data() {
15       return {
16         options: [{
17           value: '選項1',
18           label: '黃金糕'
19         }, {
20           value: '選項2',
21           label: '雙皮奶'
22         }],
23         optionsFilter: [{
24           value: '選項1',
25           label: '黃金糕'
26         }, {
27           value: '選項2',
28           label: '雙皮奶'
29         }],
30         value: ''
31       }
32     },
33     methods: {
34         dataFilter(val) {
35             this.value = val;
36             if (val) {
37             this.options = this.optionsFilter.filter((item) => {
38                 if (item.label.includes(val) || item.label.toUpperCase().includes(val.toUpperCase())) {
39                   return true
40                 }
41             })
42             } else {
43             this.options = this.optionsFilter;
44             }
45     },
46     selectFocus(e){
47       let value = e.target.value;
48        setTimeout(() => {
49           let input = this.$refs.searchSelect.$children[0].$refs.input;
50           input.value = value;
51       })
52     },
53     selectBlur(){
54       //console.log('失去')
55     },
56     selectChange(){
57            
58     },
59     visibleChange(val){
60       if(!val){
61         let input = this.$refs.searchSelect.$children[0].$refs.input;
62         input.blur();
63       }
64      
65     }
66     }
67   }
68 </script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM