input取消焦点 vue_vue如何能做到点击其他地方input不失去焦点

本文探讨了在Vue中创建一个类似iview picker的省市选择框时遇到的问题,即点击列表后input失去焦点导致列表消失。作者提供了组件代码,并希望找到一种方式使得点击弹出层时input保持焦点。目标是实现类似点击年份文本框时不会失去焦点的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想写一个省市的选择框做成类似iview中picker那种,但是在写的时候发现,使用focus事件控制列表显示/隐藏切换不好用,查了半天没找到好的解决办法

下面是我的代码:

  • {{item.province}}
    • {{item.city_label}}

export default {

name: "cityDicker",

data() {

return {

citylistshow: false, // 城市选择面板

selprovice: "",

selcity: "",

workCity: "",

cityList: [

{

province: "北京",

province_code: "001",

citys: [

{

city_label: "北京市",

city_code: "001001"

},

{

city_label: "北京郊区",

city_code: "001002"

}

]

},

{

province: "上海",

province_code: "002",

citys: [

{

city_label: "上海市",

city_code: "002001"

},

{

city_label: "其他",

city_code: "002002"

}

]

},

{

province: "深圳",

province_code: "003",

citys: [

{

city_label: "深圳",

city_code: "003001"

},

{

city_label: "其他",

city_code: "003002"

}

]

}

]

};

},

methods: {

cityFocus(flag) {

if (this.cityfocus === true) {

this.cityfocus = false;

} else {

this.citylistshow = flag;

console.log(this.citylistshow);

}

},

provinceClick(prov, e) {

this.citylistshow = true;

if (this.selprovice === prov) {

this.selprovice = "";

} else {

this.selprovice = prov;

}

},

cityClick(prov, e) {

if (this.selcity === prov) {

this.selcity = "";

this.workCity = "";

} else {

this.selcity = prov;

this.workCity = {

provice: this.selprovice,

city: this.selcity,

citycode: e.target.dataset.citycode

};

}

this.$emit("getWorkerCity", this.workCity);

console.log(this.workCity);

}

}

};

.city-select-picker {

display: inline-block;

position: relative;

z-index: 100;

.provice-list {

position: absolute;

background-color: #fff;

box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);

border-radius: 4px;

padding: 0 5px;

width: 500px;

left: 0;

top: 37px;

.provice-item {

display: inline-block;

padding: 3px 5px;

background-color: #f4f4f4;

margin: 10px 5px;

&:hover {

background-color: #e0e0e0;

}

}

}

.city-list {

position: absolute;

width: 500px;

left: 0;

margin-top: 10px;

box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);

padding: 0 5px 10px;

background-color: #fff;

border-bottom-left-radius: 4px;

border-bottom-right-radius: 4px;

.city-item {

display: inline-block;

padding: 3px 5px;

background-color: #f4f4f4;

margin: 5px;

&:hover {

background-color: #e0e0e0;

}

}

}

.proactive {

background-color: #e0e0e0 !important;

}

}

运行的结果如下图:

当点击下面的弹出层的时候直接失去焦点就消失了,造成根本选不了的结果

我想要的结果是这种点击弹出的东西文本框不会失去焦点的样子,如截图:

点击年份文本框是不会失去焦点的这种,但是想半天一直没找到好用的实现思路,希望有大神能帮忙指点下思路,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值