uni-app input 无法聚焦

uni-app input 无法聚焦

示例代码:

先将input的focus属性设置为false,1秒后设为true。

操作步骤:

第一次进入input页,通过input页前往任意页面,然后返回。

预期结果:

第一次进入表单页面时自动聚焦,通过表单页前往任意页面,然后返回表单页input 重新聚焦

实际结果:

第一次进入表单页面时自动聚焦,通过表单页前往任意页面,然后返回表单页input 就无法聚焦了,有时候键盘都弹起了,但是点键盘输入是无效的。

bug描述:

app返回上一页input 无法聚焦

相关链接:

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
Android 9.0

更多关于uni-app input 无法聚焦的实战教程也可以访问 https://www.itying.com/category-93-b0.html

30 回复

问题已确认 感谢你的反馈

更多关于uni-app input 无法聚焦的实战教程也可以访问 https://www.itying.com/category-93-b0.html


已提交,麻烦解决一下

扫码以后就无法聚焦,但是键盘依旧会被唤起,失焦事件也能触发,只是input输入框的:focus设置为true以后不聚焦

你好,请问你的这个问题解决了吗?我遇到同样的问题

什么时候能修复啊大佬。。

2023年了这个问题还没有解决

可以复现问题的demo

收到,会尽快排查测试排查问题

回复 DCloud_Android_ST: 你好,请问此问题解决了吗?3.3.11 版本复现此问题。

回复 DCloud_Android_ST: 你好,请问此问题解决了吗?3.3.13版本调用扫码uni.scanCode以后也会出现这个问题

遇到同样的问题,请问问题解决了吗?

回复 DCloud_Android_ST: 请问有解决方案了吗?

请问这个问题有解决方案了吗

这个问题有解决方案吗,调用扫码uni.scanCode以后也会出现这个问题

请问这个问题有解决方案了吗

请问这个问题有解决方案了吗

请问这个问题有解决方案了吗

时至今日,还是有这个问题

我的问题是,用扫码枪扫了以后无法聚焦,发现虽然触发失焦事件了,但是focus依旧为true,所以先将focus设置成了false,但是也没用,最后先设置成false,然后进行setTime的延时操作成功了。

我也是这样弄的

时至今日 安卓 app还是不行

时至今日 安卓 app还是不行.。之前版本可以,现在升级3.4.7版本,就没办法获取焦点!!!

现在解决了么,3.6.4是安卓真机,先聚焦然后突然失去聚焦,键盘都弹起来了。

2022年11月了,这个问题还没处理

这个问题在新版本复现了,以前是没问题的,现在APP聚焦之后,输入法键盘是弹出了,但是输入框没有选中,导致输入内容没有填充到输入框内,希望官方新版解决一下

回复 chunge404: 没用新版本开发版吧?

回复 小七ing: 正式版,开发版修复那是另一回事。

setTimeout 延迟可聚焦

憋了四年,放了个大

这是一个已知的 uni-app 在 App 平台(特别是 Android)的常见问题,通常与页面生命周期和原生输入框的焦点管理机制冲突有关。

核心原因:当页面通过 navigateBack 返回时,页面的 onShow 生命周期触发可能早于原生输入框组件的就绪状态。此时直接设置 focustrue,指令可能无法正确送达或生效,导致焦点获取失败。

直接解决方案

  1. 使用 nextTick 延迟聚焦:在 onShow 生命周期中,利用 this.$nextTick 确保 DOM 更新完成后再触发聚焦。

    onShow() {
        this.$nextTick(() => {
            this.focus = true; // 假设 focus 是绑定到 input 的变量
        });
    }
    
  2. 增加更长的延迟(备用方案):如果 nextTick 仍不稳定,可尝试使用 setTimeout 进行短延时(如 50-100ms)。

    onShow() {
        setTimeout(() => {
            this.focus = true;
        }, 100);
    }
    
  3. 手动调用聚焦方法:为 input 组件设置 ref,在 onShow 中通过 this.$refs.input.focus() 显式调用聚焦方法(注意:此方法在小程序平台可能不支持,需条件编译)。

    <input ref="input" />
    
    onShow() {
        this.$nextTick(() => {
            this.$refs.input.focus();
        });
    }
回到顶部