全面屏手势或者安卓返回键无法触发输入框的失焦事件, uni.navigateBack可以, 这里想先拦截手势再主动执行uni.navigateBack, 但是拦截以后无法返回, 网上常见的问题是uni.navigateBack也会触发onBackPress, 没有判断from然后进入死循环, 我这里已经判断了, 问题是根本就没进去第二次
示例代码里打印的from是backbutton, 是手势返回, 随后打印了1执行uni.navigateBack, 按理应该二次被onBackPress监听, 然后from等于navigateBack返回页面的, 但是没有进入第二次
我测试了常见的先弹弹窗点确认后再返回的需求, 在uni.navigateBack的位置写了uni.showModal代码, success(写了bind(this))的confirm里执行uni.navigateBack, 一样的无法执行
我用华为鸿蒙4的平板和小米14都测试了, 都不行, 感觉是你们哪次更新更出bug来了
onBackPress(e) {
console.log(e);
if(e.from=='navigateBack'){
return false;
}
console.log('1');
uni.navigateBack();
return true;
},
2***@qq.com (作者)
我直接复制你代码, 弹窗点了确认都返回不了...不知道我这边咋回事
2023-11-15 14:06
2***@qq.com (作者)
点了确认就只是弹窗关掉了, 然后啥反应也没有
2023-11-15 14:07
爱豆豆
回复 2***@qq.com: 你是用的页面不是tabbar页面吧?在success中打印下返回值对不对
2023-11-15 14:09
2***@qq.com (作者)
input时间加防抖保存确实可以, 只是怕刚输完就立马返回还是没存上, 那防抖时间就得设置的很短, 那输入的时候大概率还是会多次触发保存方法, 我那是一个由模板生成的字段超级多的表单, 各个模板加起来得有几百个字段, sql建表的时候就没一个字段一个字段加, 把整个表单json.stringify成了一个超长的字符串作为一个字段保存了, 所以频繁保存代价还是有点大的, 不设置防抖或者设置的时间过短, 会出现输入了5个数字也显示了5个数字但是等一下末尾会有一两个数字的自己消失的情况
2023-11-15 14:18
2***@qq.com (作者)
回复 爱豆豆: 不是tabbar页面是page.json里的普通页面, 打印也正常{"errMsg":"showModal:ok","confirm":true,"cancel":false}
2023-11-15 14:22
2***@qq.com (作者)
而且我每一个项目每一个有输入框的页面都要换成input时间再加上防抖, 那多麻烦...之前一直没注意到这个问题
2023-11-15 14:28
爱豆豆
回复 2***@qq.com: 你看下uni.navigateBack的回调 返回的啥 感觉像是机型的问题 我这安卓13可以确认后返回
输入框的 你可以把防抖保存时间拉长 并且onHide时再保存一次
2023-11-15 14:48
2***@qq.com (作者)
回复 爱豆豆: 试了下success, fail, complete都没返任何东西...还试了relaunch,redirectTo,navigateTo之类的方法都不行, plus.runtime.restart可以
2023-11-15 18:00
2***@qq.com (作者)
回复 爱豆豆: 鸿蒙不行就说明安卓12不行, 任何我的安卓14手机也不行, 感觉不是系统问题
2023-11-15 18:01
2***@qq.com (作者)
回复 爱豆豆: 刚建了个新项目试了一下, 没问题, 那应该就是项目问题了, 我的项目装了uni-simple-router, 难道这个和onBackPress冲突?
2023-11-15 18:19
爱豆豆
回复 2***@qq.com: 嗯嗯 那你对比排除一下
2023-11-15 18:24
2***@qq.com (作者)
回复 爱豆豆:解决以后发现拦截手势后主动调的navigateBack也无法触发失焦...只能单独处理了, 每个地方都要搞, 好麻烦
2023-11-16 14:07