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 的样式没有影响到其他区域的布局或事件处理。例如:

  • 检查 textareaz-index 是否过高,导致它覆盖了其他元素。
  • 确保 textareaposition 属性没有设置为 fixedabsolute,除非必要。
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-viewcover-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>
回到顶部