uni-app <textarea> v-model 绑定数据在 ios端键盘输入时会触发页面底部按钮 android端无此问题

uni-app <textarea> v-model 绑定数据在 ios端键盘输入时会触发页面底部按钮 android端无此问题

5 回复

请提供简单可复现的完整示例(上传附件),方便我们快速排查问题哦。 【bug优先处理规则】https://ask.dcloud.net.cn/article/38139


哎,都说拿这个工具开发省时间,省下来的时间都用来调试这些奇奇怪怪的错误。。。。。。。

把textarea 换成input 就好了。

uni-app果然是坑不少,我也遇到同样的问题。原来代码在最底下,我把它挪到最顶上它就好了,你说神奇不神奇

在 uni-app 中,<textarea> 组件使用 v-model 绑定数据时,在 iOS 端键盘输入时可能会触发页面底部按钮的点击事件,而在 Android 端没有这个问题。这通常是由于 iOS 的键盘弹出行为与 Android 不同,导致页面布局发生变化,从而触发了按钮的点击事件。

解决方案

  1. 调整页面布局

    • 确保页面底部按钮与 <textarea> 之间有足够的间距,避免键盘弹出时按钮被顶起。
    • 可以使用 padding-bottommargin-bottom 来增加底部空间。
  2. 监听键盘事件

    • 监听键盘的弹出和收起事件,动态调整页面布局或按钮的显示状态。
    • 可以使用 uni.onKeyboardHeightChange 来监听键盘高度的变化。
    uni.onKeyboardHeightChange(res => {
      const keyboardHeight = res.height;
      if (keyboardHeight > 0) {
        // 键盘弹出,调整布局
      } else {
        // 键盘收起,恢复布局
      }
    });
  3. 使用 position: fixed

    • 将页面底部按钮设置为 position: fixed,使其固定在页面底部,不受键盘弹出的影响。
    .bottom-button {
      position: fixed;
      bottom: 0;
      left: 0;
      right: 0;
    }
  4. 使用 scroll-view

    • 将页面内容包裹在 scroll-view 中,确保键盘弹出时页面可以滚动,避免按钮被顶起。
    <scroll-view scroll-y="true" style="height: 100vh;">
      <!-- 页面内容 -->
      <textarea v-model="inputValue"></textarea>
      <button class="bottom-button">提交</button>
    </scroll-view>
  5. 手动控制按钮的显示

    • 在键盘弹出时隐藏按钮,键盘收起时再显示按钮。
    data() {
      return {
        isKeyboardVisible: false
      };
    },
    methods: {
      onKeyboardHeightChange(res) {
        this.isKeyboardVisible = res.height > 0;
      }
    }
    <button v-if="!isKeyboardVisible" class="bottom-button">提交</button>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!