uni-app ios14.7.1 textarea影响其他区域选中
uni-app ios14.7.1 textarea影响其他区域选中
| 项目 | 信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Mac |
| PC开发环境操作系统版本号 | 10.14.6 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.98 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 14 |
| 手机厂商 | 苹果 |
| 手机机型 | iphone12 |
| 页面类型 | vue |
| vue版本 | vue3 |
| 打包方式 | 离线 |
| 项目创建方式 | HBuilderX |
操作步骤:
- 页面包含300px高的view,下面添加textarea组件,这时长按view即可复现
预期结果:
- 长按其他区域不选中textarea
实际结果:
- 当textarea无内容时,选中其他区域会选中到textarea到顶部整个区域, 有内容时长按其他区域会选中在textarea里
bug描述:
- 当textarea上面有其他元素时,长按选中会选到textarea,且选中区域延伸到屏幕顶端

更多关于uni-app ios14.7.1 textarea影响其他区域选中的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app ios14.7.1 textarea影响其他区域选中的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 Uni-App 中,textarea 组件在 iOS 14.7.1 上可能会影响其他区域的选中行为,这通常是由于 iOS 系统的默认行为或 Uni-App 的渲染机制导致的。以下是一些可能的解决方案和排查步骤:
1. 检查 textarea 的样式
确保 textarea 的样式没有影响到其他区域的布局或事件处理。例如:
- 检查
textarea的z-index是否过高,导致它覆盖了其他元素。 - 确保
textarea的position属性没有设置为fixed或absolute,除非必要。
textarea {
z-index: 1; /* 确保不会覆盖其他元素 */
position: relative; /* 避免脱离文档流 */
}
2. 使用 @focus 和 @blur 事件
在 textarea 获得焦点或失去焦点时,手动控制其他区域的行为。例如:
- 在
textarea获得焦点时,禁用其他区域的点击事件。 - 在
textarea失去焦点时,恢复其他区域的点击事件。
<template>
<view>
<textarea @focus="handleFocus" @blur="handleBlur"></textarea>
<view @click="handleClick">其他区域</view>
</view>
</template>
<script>
export default {
methods: {
handleFocus() {
// 禁用其他区域的点击事件
this.isTextareaFocused = true;
},
handleBlur() {
// 恢复其他区域的点击事件
this.isTextareaFocused = false;
},
handleClick() {
if (!this.isTextareaFocused) {
console.log('其他区域被点击');
}
}
},
data() {
return {
isTextareaFocused: false
};
}
};
</script>
3. 调整 textarea 的层级
如果 textarea 覆盖了其他区域,可以尝试调整其层级或布局。例如:
- 将
textarea放在页面的底部或特定区域,避免与其他元素重叠。 - 使用
cover-view或cover-image组件(在需要覆盖原生组件时)。
4. 检查 Uni-App 版本
确保你使用的是最新版本的 Uni-App,因为官方可能会修复一些已知的兼容性问题。可以通过以下命令更新 Uni-App:
npm install @dcloudio/uni-app@latest
5. 测试原生 iOS 行为
在原生 iOS 项目中测试 textarea 的行为,确认是否是 iOS 系统本身的问题。如果是系统问题,可能需要通过特定的 CSS 或 JavaScript 代码来规避。
6. 使用 input 替代 textarea
如果 textarea 的问题无法解决,可以尝试使用 input 组件替代,并通过多行输入模拟 textarea 的行为。
<template>
<view>
<input type="text" :value="inputValue" @input="handleInput" />
</view>
</template>
<script>
export default {
data() {
return {
inputValue: ''
};
},
methods: {
handleInput(event) {
this.inputValue = event.detail.value;
}
}
};
</script>

