【bug】iOS中input组件的focus事件触发慢了
发布于 5 年前 作者 xiaxiong 1057 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

在iOS中,input组件的focus事件回调会在键盘呼起动画结束后触发。举个简单的例子

页面的wxml:

<input  focus="{{focus}}" bindfocus="handleFocus" bindblur="handleBlur" />

<button bindtap="focus">focus input</button>

<button>blur input</button>

页面js:

Page({
  data: {
     focus: false

  },

 focus() {

   this.setData({focus: true})

 },

  handleFocus(){
     console.log("handleFocus")

  },

  handleBlur(){

     console.log("handleBlur")

  },

})

1、点击“focus input”按钮,focus变为true,开始拉起键盘,这个过程是有动画的。

2、直观上,键盘呼起动画持续时长大概是500ms ~ 1000ms,动画结束之后,handleFocus回调会被执行,打印handleFocus。

3、如果在键盘呼起的过程中快速点击“blur input”按钮,会立即触发blur事件。由于focus事件是在键盘动画结束之后触发的,handleBlur的执行时机反而在handleFocus之前了。

这个问题很严重,事件回调的顺序串了,很多逻辑就乱了。

不提供实例了,如果这个说法(在iOS中,input组件的focus事件回调会在键盘呼起动画结束后触发)成立,应该就能说明问题了。

3 回复

嗯。input是在键盘拉起才触发,建议加变量控制focus和blur时序

老哥有解决吗?遇到同样的问题

我都直接用tap时机替代了,效果还行

回到顶部