Vue element 下拉框 可输入可选择(无bug)

背景: 需要一个可填可选的下拉框

当用户自定义输入时,自动添加“(其他)”后缀

效果如下:

在这里插入图片描述

<el-select 
	v-model="value"
 	placeholder="请选择"
 	clearable
 	filterable
 	@blur="selectBlur"
 	@clear="selectClear"
 	@change="selectChange"
 >
  <el-option
    v-for="(item,index) in options"
    :key="index"
    :label="item.label"
    :value="item.value" />
</el-select>
data() {
  return {
	value: '',
	options: [
		{value: '无保留意见', label: '无保留意见'},
		{value: '保留意见', label: '保留意见' }
 	],
  }
}
methods: {
  selectBlur(e) {
    // 意见类型
    if (e.target.value !== '') {
      this.value = e.target.value + '(其他)';
      this.$forceUpdate();   // 强制更新
    }
  },
  selectClear() {
    this.value = '';
    this.$forceUpdate();
  },
  selectChange(val) {
    this.value = val;
    this.$forceUpdate();
  },
 }
注: 使用Vue开发时,在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值;

赋值完以后,执行下面这个方法 强制刷新数据

this.$forceUpdate();

补充:
————————————————————————————————————————————
1、经测试:上述 @change可以拿掉,不影响功能。
————————————————————————————————————————————
2、若表单中有多个字段需要用到相同的方法,则可以统一,使用回调函数的方式赋值。

// 字段 name, prop=name
@blur="(e) => selectBlur(e, 'name')"
// 字段 age, prop=age
@blur="(e) => selectBlur(e, 'age')"
selectBlur(e, prop) {
  if (e.target.value !== '') {
    this[prop] = e.target.value + '(其他)';
    this.$forceUpdate();   // 强制更新
  }
},

————————————————————————————————————————————
补充:
————————————————————————————————————————————

第二种简单方式实现下拉框可输可选:

直接使用default-first-option 属性配合allow-create + filterable即可 :输入后自动创建第一个匹配项,选择后为当前下拉框的值
请添加图片描述

  <el-select 
  	v-model="queryParams.network" 
  	clearable 
  	filterable 
  	allow-create 
  	default-first-option 
  	@blur="selectBlur($event)"
 >
    <el-option
        v-for="(item,index) in list"
        :key="index"
        :label="item"
        :value="item">
    </el-option>
  </el-select>
data() {
	return {
		queryParams: {},
		optionList: ['172.11.154.1', '172.11.188.2', '172.13.122.8', '', '172.15.154.22']
	}
},
method() {
	// 下拉框可输可选
	selectBlur(e) {
	  if (e.target.value !== '') {
	    this.$set(this.queryParams, 'network', e.target.value);
	  }
	},
}

  • 22
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
回答: 在Element UI中,下拉框可以通过设置filterable属性为true来实现可输入的功能。例如,可以使用以下代码来创建一个可输入下拉框: ```html <el-select v-model="form.pcode" clearable filterable placeholder="请选择产品" class="product-input" allow-create> <el-option v-for="(item,index) in arr_product" :key="index" :label="item.label" :value="item.value" /> </el-select> ``` 在这个例子中,设置了filterable属性为true,允许用户在下拉框输入内容。用户可以选择下拉框中的选项,也可以自己输入内容。\[2\] 另外,如果你想在输入框失去焦点时获取输入的值,可以使用blur事件。例如: ```javascript productSelect(e) { let value = e.target.value; // 输入框值 if(value) { this.form.pcode = value; // 如果输入框不为空,将输入的值赋给v-model绑定的变量 } } ``` 在这个例子中,当输入框失去焦点时,会触发productSelect方法,获取输入框的值,并将其赋给form.pcode变量。\[1\] 希望这个回答能够帮到你! #### 引用[.reference_title] - *1* *2* [elementui select可下拉框选择输入(不需要点回车,不需要额外的操作)](https://blog.csdn.net/yuanqi3131/article/details/122102029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue element-ui设置可填可选下拉框](https://blog.csdn.net/qq_36509946/article/details/128846080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值