textarea/input在输入的时候会出现离开输入框焦点的情况 uni-app
textarea/input在输入的时候会出现离开输入框焦点的情况 uni-app
开发环境信息
| 项目 | 详情 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC开发环境版本号 | win 11 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.87 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 18 |
| 手机厂商 | 苹果 |
| 手机机型 | iphone 16 |
| 页面类型 | vue |
| vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码
<textarea maxlength="-1" :auto-focus="autoFocus" :focus="focus" :placeholder="placeholder" :auto-height="autoHeight" :disabled="disabled" v-model="textareaValue" @input="textareaValueChange" style="width: 100%;" :style="customStyle"></textarea>
操作步骤
- 持续键盘输入,会随机出现,详见视频
预期结果
- 无
实际结果
- 无
bug描述
textarea/input在输入的时候,会出现离开输入框焦点的情况,原因未知。随机出现,但是出现的频率还是比较高。安卓未发现这个问题。已经验证过跟输入法没关系。附件视频中,输入到“破功”后就离开了焦点,但是键盘还在,且输入的内容不会出现在textarea中。
附件
更多关于textarea/input在输入的时候会出现离开输入框焦点的情况 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该bug反馈内容基本完整但存在不足:标题和描述清晰说明了iOS设备上textarea随机失焦的问题,提供了代码示例和分类信息;但复现步骤过于简略(仅"持续键盘输入"),缺乏具体触发条件;预期/实际结果描述为"无"不合理,应明确期望保持焦点而实际丢失焦点;代码示例缺少data变量定义等上下文,无法直接运行复现。
经核查知识库,iOS平台textarea焦点管理存在特殊性:H5平台焦点行为取决于浏览器实现(文档说明)。当前HBuilderX 4.87版本未明确记录此问题,但iOS 18可能存在新特性兼容问题。建议用户:1) 补充完整可复现代码及具体触发场景;2) 尝试改用uni-easyinput组件并设置focus属性;3) 升级至最新HBuilderX版本验证;4) 检查是否存在其他JS逻辑意外调用blur方法。该问题需进一步排查,暂不能判定为框架基础bug。 内容为 AI 生成,仅供参考
更多关于textarea/input在输入的时候会出现离开输入框焦点的情况 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html
使用 renderjs 测试下,改为 :value=“inputValue” @input=“renderScript.onInputChange” 来处理。
<template>
<view>
<input type=“text” :value=“inputValue” :data-init=“inputValue” @input=“renderScript.onInputChange”
style=“border: 1px solid red;” />
<view>逻辑层同步的数据:</view>
<view>{{ inputValue }}</view>
</view>
</template>
如果写成这样<textarea ></textarea>就没问题,不绑定人任何值,任何事件
回复 一桶浆糊: 我更新了回复,看我回复
还是一样。把你这个代码照贴过去的。
回复 DCloud_UNI_OttoJi: 我新增了一个新的项目,用最简单的代码只要v-model 或者@input 都会产生这个现象
回复 DCloud_UNI_OttoJi: 补充一下,iPhoneX也有这个问题。但是用HBuilderX4.24编译的vue2项目并没有这个现象
回复 DCloud_UNI_OttoJi:
试了还是不行,而且我是新初始化的一个vue3项目来测试的 试了三台iPhone,iPhone16,iPhoneX pro max,iPhone 11,都存在这个问题。 但是在之前vue2的版本里,是没有这个问题的
回复 一桶浆糊: 请提供一个复现工程 zip 压缩包,说明你的操作步骤
回复 DCloud_UNI_OttoJi: 已上传。麻烦看下一个回复。谢谢
复现步骤: 1.运行到iPhone手机
在首页的input框上输入文字。反复输入文字后即可重现,比如:输入字符o,选中第一个字,继续输入o,再选中第一个字,一直重复。会出现键盘未显示,但是input框失去焦点的情况
字打错了。 应该为: 会出现键盘未消失,但是input框失去焦点的情况
我私聊你提供了兼容方案,请你确认回复一下。
回复 DCloud_UNI_OttoJi: 用您提供的dist后,会引发另一个问题,并且这个问题在IOS和安卓上都有: 当textarea的confirm-hold=true的时候,清空textarea绑定的value的时候,value清空了,但是视图上仍然有内容。 已经经过排查,就是替换dist后才有的问题,换回原来的dist后没有这个问题
回复 一桶浆糊: 提供下复现工程。确定问题只在 comtrim-hold 上存在吗
回复 DCloud_UNI_OttoJi: 确定是comtrim-hold引起的问题。并且这个问题在安卓和ios上都存在,鸿蒙不存在该问题
这是comtrim-hold的bug工程
我运行你提供的复现工程,在安卓真机上分别在两个输入框里使用微信输入法输入多个汉字,再删除所有内容,都可以正常表现,你在明确一下操作步骤
回复 DCloud_UNI_OttoJi: 是用你发给我的那个dis包吗?只有你发给我的那个dist包运行才会有这个效果哦。
回复 一桶浆糊: 回复 DCloud_UNI_OttoJi: 输入多个汉字后,点击完成,触发@confirm方法后(confirm方法的逻辑是把绑定值清空)。这个时候值清空了,但是textarea里的值还在
回复 DCloud_UNI_OttoJi: 输入文字后,不要手动删除,触发confirm事件(按键盘上的“完成”,confirm方法的逻辑是把绑定值清空)后才能重现
回复 一桶浆糊: 看我下面的评论
兼容 comtrim-hold 、兼容快速输入游标不消失,请使用下面附件加压,放到 uni-app-plus/dist 中
已测试,没问题。感谢。
这个问题通常是由于iOS系统在特定场景下的渲染机制导致的。在uni-app中,当页面滚动或布局变化时,iOS可能会错误地触发输入框失焦。
主要原因:
- 页面滚动冲突:iOS在输入时如果检测到页面滚动,可能会强制失焦
- 布局重绘:动态内容变化导致布局重新计算,触发焦点丢失
- 键盘事件处理:iOS键盘弹出/收起时的特殊行为
解决方案:
- 禁用页面滚动(推荐):
<template>
<scroll-view :scroll-y="false" style="height: 100vh;">
<textarea
:adjust-position="false"
:hold-keyboard="true"
v-model="textareaValue"
@focus="handleFocus"
></textarea>
</scroll-view>
</template>
<script setup>
const handleFocus = () => {
// 确保输入时页面不滚动
}
</script>
- 使用关键属性:
<textarea
:adjust-position="false" <!-- 防止键盘顶起时布局变化 -->
:hold-keyboard="true" <!-- 保持键盘不收起 -->
:show-confirm-bar="false" <!-- 隐藏完成栏 -->
v-model="textareaValue"
></textarea>
- 监听和处理焦点:
let isFocusing = false
const onFocus = () => {
isFocusing = true
// 可以临时禁用页面滚动
}
const onBlur = () => {
isFocusing = false
// 如果是意外失焦,可以重新聚焦
if (shouldRefocus) {
setTimeout(() => {
this.$refs.textarea.focus()
}, 100)
}
}


