鸿蒙texarea的@focus返回的detail.height为0 uni-app

鸿蒙texarea的@focus返回的detail.height为0 uni-app

开发环境与版本信息

项目
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 mac26
HBuilderX类型 正式
HBuilderX版本号 5.07
手机系统 HarmonyOS NEXT
手机系统版本号 HarmonyOS 6.0.0
手机厂商 华为
手机机型 nova14
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

bug描述:

texarea的@focus返回的detail.height为0,但是onKeyboardheightchange返回的却有值,文档没有明确说明鸿蒙不支持且有方法能返回

示例代码:

<template>
<textarea
[@input](/user/input)="handleInput"
[@blur](/user/blur)="handleBlur"
[@focus](/user/focus)="onFocus"
[@confirm](/user/confirm)="onConfirm"
[@keyboardheightchange](/user/keyboardheightchange)="keyboardheightchange"
/>
</template>

<script>

export default {

methods: {

    handleBlur(e) {

    },
    onFocus(e) {
         console.error(e,"onFocus")
    },
    onConfirm(e) {
    },
    onClear(e) {
    },
    keyboardheightchange(e){
        console.error(e,"keyboardheightchange")
    }
}

};
</script>

操作步骤:

<template>
<textarea
[@input](/user/input)="handleInput"
[@blur](/user/blur)="handleBlur"
[@focus](/user/focus)="onFocus"
[@confirm](/user/confirm)="onConfirm"
[@keyboardheightchange](/user/keyboardheightchange)="keyboardheightchange"
/>
</template>

<script>

export default {

methods: {

    handleBlur(e) {

    },
    onFocus(e) {
         console.error(e,"onFocus")
    },
    onConfirm(e) {
    },
    onClear(e) {
    },
    keyboardheightchange(e){
        console.error(e,"keyboardheightchange")
    }
}

};
</script>

更多关于鸿蒙texarea的@focus返回的detail.height为0 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

已确认是 bug , 下面给出临时方案,你可以测试一下
将下方文件放入项目 harmony-configs/libs 目录下重新运行即可

更多关于鸿蒙texarea的@focus返回的detail.height为0 uni-app的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好的谢谢

欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

针对这个 bug 反馈,我来做一个评审分析:

  1. 反馈内容完整性评估
    这个反馈整体结构比较清晰,但有几个地方需要补充和优化:

BUG 描述:描述较为清楚,指出了鸿蒙平台上 textarea 的 @focus 事件返回的 detail.height 为 0,而 @keyboardheightchange 事件能正常返回键盘高度。这是一个明确的问题陈述,官方人员能够理解。

代码示例:代码示例重复了两次,且示例本身比较简单。虽然能够说明问题,但建议提供一个更完整的最小复现 demo,比如增加一些 console 输出对比两个事件返回值的差异,这样更直观。

复现步骤:复现步骤直接粘贴了代码,没有用文字描述操作流程。应该改为类似"在鸿蒙真机上点击 textarea 输入框使其聚焦,观察 @focus 事件回调中的 detail.height 值"这样的描述。不过结合代码示例,官方人员基本可以复现。

预期结果:预期 @focus 的 detail.height 存在值,这个预期是合理的。

实际结果:实际结果为 0,描述清晰。

分类信息:版本号、平台信息、设备信息都比较完整。HBuilderX 5.07 正式版,鸿蒙 NEXT 平台,HarmonyOS 6.0.0,这些信息都有助于定位问题。

总体评价:反馈基本完整,但复现步骤建议用文字描述而非直接贴代码,这样更规范。

  1. Bug 是否成立分析
    根据知识库中的文档,我找到了关键依据。
    在 uniapp 官方文档的 textarea 组件说明中,@focus 事件的描述明确写了:

@focus | EventHandle | 输入框聚焦时触发,event.detail = { value, height },height 为键盘高度 | 仅微信小程序、京东小程序、App(HBuilderX 2.0+ nvue uni-app模式) 、QQ小程序支持 height

官方文档链接
这个文档明确列出了 height 参数的平台支持范围:微信小程序、京东小程序、App(nvue uni-app模式)、QQ小程序。鸿蒙(HarmonyOS NEXT)平台并未出现在支持列表中。
因此,这个 bug 反馈实际上是一个平台兼容性问题,而非真正的 bug。鸿蒙平台目前 @focus 事件的 detail.height 返回 0 是符合文档预期的,因为文档中并未声明鸿蒙平台支持该特性。

  1. 替代方案建议
    既然 @focus 在鸿蒙上无法获取键盘高度,但用户反馈中提到 @keyboardheightchange 事件在鸿蒙上是可以正常返回键盘高度的,那么可以考虑以下替代方案:

使用 @keyboardheightchange 事件来监听键盘高度的变化,这是鸿蒙平台上获取键盘高度的正确方式。该事件在键盘高度发生变化时触发,event.detail = {height: height, duration: duration}。

示例调整:
keyboardheightchange(e){
console.log(“键盘高度:”, e.detail.height); // 在鸿蒙上能正常获取
// 可以在这里处理键盘弹出后的页面布局调整
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

如果需要在 focus 时立即获取键盘高度,可以在 @focus 中设置一个标志位,然后结合 @keyboardheightchange 来获取首次弹出的键盘高度。

总结
这个反馈属于平台兼容性范畴,文档已明确说明 @focus 的 height 参数不支持鸿蒙平台。建议用户改用 @keyboardheightchange 事件来获取键盘高度,该事件在鸿蒙上已验证可用。如果希望鸿蒙平台也支持 @focus 返回键盘高度,可以将其作为功能需求提交,而非 bug 反馈。 内容为 AI 生成,仅供参考

感谢反馈,我看一下这个问题

回到顶部