微信小程序中怎么使用计时器?

代码如下, 需要在页面加载的时候开始计时, 20秒后, 按钮才可以点击

<button type="primary" disabled="{{ !submitted }}">提交{{ hint }} </button>

setTimeout()在小程序里访问不到外部的函数, 不知道是怎么回事...

阅读 2.2k
2 个回答

你的需求是想要改变disabled的状态吧,根据延时定时器20秒后改变这个状态。

Page({
    data: {
        disabled: true
    },
    onLoad: function() {
        setTimeout(() => {
            this.setData({
                disabled: false
            })
        }, 20000)
    }
})

这是我原先的代码, 报错 Cannot read property 'countdown' of undefined

Page({

  data: {

  },

  onCountdown: function () {
    const countdown = this.data.countdown - 1;
    this.setData({
      countdown: countdown
    });
    if (countdown > 0) {
      setTimeout(this.onCountdown.bind(this), 1000);
      this.setData({
        hint: '需要' + countdown + '秒'
      })
    } else {
      this.setData({
        hint: '',
        submitted: true
      })
    }
  },

  onLoad(options) {
    this.setData({
      countdown: 10
    });
    setTimeout(this.onCountdown, 1000);
  }

})

后来改成了 setTimeout(this.onCountdown.bind(this), 1000); 就可以了
百度上找的一个解释就是 bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题