uni-app ios input confirm事件隐藏软键盘后,再点击页面中除input元素,会再次触发input聚焦
uni-app ios input confirm事件隐藏软键盘后,再点击页面中除input元素,会再次触发input聚焦
示例代码:
<template>
<view class="content">
<view>
<input style="background-color: pink;" auto-blur @confirm="testInputConfirm()" @blur="testBlur()" @focus="testFocus()" />
</view>
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
testFocus() {
console.log('focus');
},
testBlur() {
console.log('blur');
uni.hideKeyboard();
},
testInputConfirm() {
console.log('confirm');
uni.hideKeyboard();
}
}
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}
.text-area {
display: flex;
justify-content: center;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>
操作步骤:
在input中监听blur confirm focus 事件并打印,在confirm中添加hideKeyboard事件隐藏软键盘,input设置auto-blur属性,当输入完文字触发confirm事件时,此时input失去焦点,但点击页面任意位置,除input,会让input聚焦
预期结果:
不触发任何事件
实际结果:
点击页面其它位置使input重新聚焦
bug描述:
在input中监听blur confirm focus 事件并打印,在confirm中添加hideKeyboard事件隐藏软键盘,input设置auto-blur属性,当输入完文字触发confirm事件时,此时input失去焦点,但点击页面任意位置,除input,会触发input的聚焦事件,目前仅ios会触发,打印日志如下图所示
更多关于uni-app ios input confirm事件隐藏软键盘后,再点击页面中除input元素,会再次触发input聚焦的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
而且在我的手机上,点击软键盘右下角按钮后并不能实现软键盘的自动收起,confirm-hold默认为false应该就是点击后收起吧
这是一个iOS平台特有的问题,主要是由于uni.hideKeyboard()和auto-blur属性在iOS上的交互行为导致的。
问题原因分析:
- iOS的软键盘隐藏和焦点处理机制与Android不同
- 使用uni.hideKeyboard()后,iOS系统仍保留了一个"虚拟焦点"
- 点击页面其他位置时,系统会尝试将焦点重新给到之前获得焦点的input
解决方案:
- 移除auto-blur属性,改为手动控制
- 在confirm事件中先调用blur()再隐藏键盘
修改后的代码建议:
testInputConfirm() {
console.log('confirm');
this.$refs.inputRef.blur(); // 先手动触发blur
setTimeout(() => {
uni.hideKeyboard();
}, 50);
}