收藏
回答

KeyboardHeight事件不支持注册和注销多个函数

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.onKeyboardHeightChange 微信iOS客户端 8.0.2 2.15.0

点击input输入框,查看console日志。

注册f1,f2后注销f2,再注册f3,应该看到f1和f3的日志

但是只有f3的日志,而且触发了3条f3日志。

function f1() {console.log('f1')}
function f2() {console.log('f2')}
function f3(res) {console.log('f3', res)}
wx.onKeyboardHeightChange(f1)
wx.onKeyboardHeightChange(f2)
wx.offKeyboardHeightChange(f2)
wx.onKeyboardHeightChange(f3)


Bug:

1. onKeyboardHeightChange 会覆盖已注册的函数

2. offKeyboardHeightChange 会注销所有的函数

3. 1次 KeyboardHeight 事件会触发3次监听函数,3次的参数不一致

回答关注问题邀请回答
收藏

4 个回答

  • Vinlic
    Vinlic
    2021-02-17

    这是个明显的bug,等待官方修复吧。卸载事件时会把所有事件卸掉

    2021-02-17
    有用 2
    回复
  • .       
    .       
    2021-03-01

    关于bug1::楼主,这个是你使用的问题 wx.onKeyboardHeightChange官方应该只考虑到了绑定一个function,而你绑定了三次 。

    关于bug2:因为bug1传入的function被覆盖掉了,所以,对于offKeyboardHeightChange注销掉的其实是最后一个绑定进去的function,而并非你说的会注销所有的函数。

    关于bug3:

    请下面链接中官方参考文档中的:

    https://developers.weixin.qq.com/miniprogram/dev/component/input.html

    键盘高度发生变化,keyboardheightchange事件可能会多次触发,开发者对于相同的height值应该忽略掉。

    至于返回参数问题:参考官方

    https://developers.weixin.qq.com/miniprogram/dev/api/ui/keyboard/wx.onKeyboardHeightChange.html

    文档中所述,提供给开发者返回的height 属性是没有问题的。


    解决了您的bug的话,麻烦给点个有用。

    建议写法:在page或者组件页面中的data定义一个键盘高度变量,当键盘高度发生改变的时候,将这个页面中的data中定义的键盘高度变量的值赋值为键盘高度,当键盘隐蔽掉时,将该键盘高度的变量赋值为隐蔽掉键盘后的键盘高度。使用时,直接取监听该变量的改变即可。

    2021-03-01
    有用 1
    回复
  • Why not?
    Why not?
    2021-02-21

    怎么安卓不是这样么?

    2021-02-21
    有用
    回复 3
    • もも
      もも
      2021-02-21
      没试,开发工具和iPhone是这样,Android应该也一样吧
      2021-02-21
      回复
    • Why not?
      Why not?
      2021-02-22回复もも
      不一定的,运行环境不一样
      2021-02-22
      回复
    • もも
      もも
      2021-02-23回复Why not?
      不一样就更糟糕了 (╯‵□′)╯︵┴─┴
      2021-02-23
      回复
  • 跨商通
    跨商通
    2021-02-19

    谢邀。不懂。

    2021-02-19
    有用
    回复
登录 后发表内容
问题标签