一桶浆糊
一桶浆糊
  • 发布:2025-12-26 13:26
  • 更新:2026-01-09 11:10
  • 阅读:217

【报Bug】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中

2025-12-26 13:26 负责人:DCloud_UNI_OttoJi 分享
已邀请:
Ask小助手

Ask小助手

该bug反馈内容基本完整但存在不足:标题和描述清晰说明了iOS设备上textarea随机失焦的问题,提供了代码示例和分类信息;但复现步骤过于简略(仅"持续键盘输入"),缺乏具体触发条件;预期/实际结果描述为"无"不合理,应明确期望保持焦点而实际丢失焦点;代码示例缺少data变量定义等上下文,无法直接运行复现。

经核查知识库,iOS平台textarea焦点管理存在特殊性:H5平台焦点行为取决于浏览器实现(文档说明)。当前HBuilderX 4.87版本未明确记录此问题,但iOS 18可能存在新特性兼容问题。建议用户:1) 补充完整可复现代码及具体触发场景;2) 尝试改用uni-easyinput组件并设置focus属性;3) 升级至最新HBuilderX版本验证;4) 检查是否存在其他JS逻辑意外调用blur方法。该问题需进一步排查,暂不能判定为框架基础bug。

内容为 AI 生成,仅供参考
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

使用 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>  

<script>  
    export default {  
        data() {  
            return {  
                inputValue: '初始值'  
            }  
        },  
        methods: {  
            // 接收从 renderjs 传回的数据  
            receiveMsg(data) {  
                this.inputValue = data;  
                console.log('逻辑层收到数据:', data);  
            }  
        }  
    }  
</script>  

<script module="renderScript" lang="renderjs">  
    export default {  
        methods: {  
            onInputChange(event, ownerInstance) {  
                const value = event.detail.value;  
                ownerInstance.callMethod('receiveMsg', value);  
            }  
        }  
    }  
</script>
  • 一桶浆糊 (作者)

    <template>

    <textarea :value="remark" @input="inputChange"></textarea>

    </template>

    <script>

    export default {

    data() {

    return {

    remark: "",

    remarkNew: ""

    }

    },

    methods: {

    inputChange(e) {

    this.remarkNew = e.detail.value;

    console.log('---------->',this.remarkNew)

    }

    }

    }

    </script>

    改成这样问题依旧


    如果写成这样<textarea ></textarea>就没问题,不绑定人任何值,任何事件

    2025-12-26 15:37

  • DCloud_UNI_OttoJi

    回复 一桶浆糊: 我更新了回复,看我回复

    2025-12-26 16:26

  • 一桶浆糊 (作者)

    还是一样。把你这个代码照贴过去的。

    2025-12-26 17:21

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 我新增了一个新的项目,用最简单的代码只要v-model 或者@input 都会产生这个现象

    2025-12-26 17:22

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 补充一下,iPhoneX也有这个问题。但是用HBuilderX4.24编译的vue2项目并没有这个现象

    2025-12-26 17:38

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi:


    <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>

    <script>
    export default {
    data() {
    return {
    inputValue: '初始值'
    }
    },
    methods: {
    // 接收从 renderjs 传回的数据
    receiveMsg(data) {
    this.inputValue = data;
    console.log('逻辑层收到数据:', data);
    }
    }
    }
    </script>

    <script module="renderScript" lang="renderjs">
    export default {
    methods: {
    onInputChange(event, ownerInstance) {
    const value = event.detail.value;
    ownerInstance.callMethod('receiveMsg', value);
    }
    }
    }
    </script>

    试了还是不行,而且我是新初始化的一个vue3项目来测试的

    试了三台iPhone,iPhone16,iPhoneX pro max,iPhone 11,都存在这个问题。

    但是在之前vue2的版本里,是没有这个问题的

    2025-12-29 10:54

  • DCloud_UNI_OttoJi

    回复 一桶浆糊: 请提供一个复现工程 zip 压缩包,说明你的操作步骤

    2025-12-29 11:10

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 已上传。麻烦看下一个回复。谢谢

    2025-12-29 11:18

一桶浆糊

一桶浆糊 (作者)

复现步骤:
1.运行到iPhone手机

  1. 在首页的input框上输入文字。反复输入文字后即可重现,比如:输入字符o,选中第一个字,继续输入o,再选中第一个字,一直重复。会出现键盘未显示,但是input框失去焦点的情况
  • 一桶浆糊 (作者)

    字打错了。

    应该为:

    会出现键盘未消失,但是input框失去焦点的情况

    2025-12-29 11:53

  • DCloud_UNI_OttoJi

    我私聊你提供了兼容方案,请你确认回复一下。

    2025-12-30 17:07

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 已确认解决,用您提供的文件替换/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-app-plus/dist的内容,已解决。等待版本更新。谢谢。

    2025-12-31 09:57

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 用您提供的dist后,会引发另一个问题,并且这个问题在IOS和安卓上都有:

    当textarea的confirm-hold=true的时候,清空textarea绑定的value的时候,value清空了,但是视图上仍然有内容。

    已经经过排查,就是替换dist后才有的问题,换回原来的dist后没有这个问题

    2026-01-08 13:25

  • DCloud_UNI_OttoJi

    回复 一桶浆糊: 提供下复现工程。确定问题只在 comtrim-hold 上存在吗

    2026-01-08 14:33

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 确定是comtrim-hold引起的问题。并且这个问题在安卓和ios上都存在,鸿蒙不存在该问题

    2026-01-08 14:39

一桶浆糊

一桶浆糊 (作者)

这是comtrim-hold的bug工程

  • DCloud_UNI_OttoJi

    我运行你提供的复现工程,在安卓真机上分别在两个输入框里使用微信输入法输入多个汉字,再删除所有内容,都可以正常表现,你在明确一下操作步骤

    2026-01-08 15:33

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 是用你发给我的那个dis包吗?只有你发给我的那个dist包运行才会有这个效果哦。

    2026-01-08 15:54

  • 一桶浆糊 (作者)

    回复 一桶浆糊: 回复 DCloud_UNI_OttoJi: 输入多个汉字后,点击完成,触发@confirm方法后(confirm方法的逻辑是把绑定值清空)。这个时候值清空了,但是textarea里的值还在

    2026-01-08 15:56

  • 一桶浆糊 (作者)

    回复 DCloud_UNI_OttoJi: 输入文字后,不要手动删除,触发confirm事件(按键盘上的“完成”,confirm方法的逻辑是把绑定值清空)后才能重现

    2026-01-08 16:08

  • DCloud_UNI_OttoJi

    回复 一桶浆糊: 看我下面的评论

    2026-01-09 11:09

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

兼容 comtrim-hold 、兼容快速输入游标不消失,请使用下面附件加压,放到 uni-app-plus/dist 中

  • 一桶浆糊 (作者)

    已测试,没问题。感谢。

    2026-01-09 12:03

要回复问题请先登录注册