鸿蒙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
已确认是 bug , 下面给出临时方案,你可以测试一下
将下方文件放入项目 harmony-configs/libs 目录下重新运行即可
更多关于鸿蒙texarea的@focus返回的detail.height为0 uni-app的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好的谢谢
欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。
针对这个 bug 反馈,我来做一个评审分析:
- 反馈内容完整性评估
这个反馈整体结构比较清晰,但有几个地方需要补充和优化:
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,这些信息都有助于定位问题。
总体评价:反馈基本完整,但复现步骤建议用文字描述而非直接贴代码,这样更规范。
- 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 是符合文档预期的,因为文档中并未声明鸿蒙平台支持该特性。
- 替代方案建议
既然 @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 生成,仅供参考
感谢反馈,我看一下这个问题

