1,定时器执行的函数
- var SMSbtnTiming = function () {
- if (secondCount === 0) {
- $self.addClass('enabled').removeClass('disabled');
- $self.val('重新发送');
- $self.removeAttr('disabled');
- if (intervalHook) {
- clearInterval(intervalHook);
- intervalHook = null;
- }
- } else {
- $self.val('重新发送(' + secondCount + 's)');
- secondCount--;
- }
- };
2,发送请求,并且操作成功后才执行倒计时
- $.ajax({
- url: changeBindServer + action,
- type: 'GET',
- dataType: 'jsonp',
- data: {mobile: mobile},
- success: function (data) {
- if (data.result) {
- $spanHint.removeClass(CodeErrorMsg_class);
- $spanHint.show();
- $spanHint.text('发送成功');
- $self.addClass('disabled').removeClass('enabled');
- $self.val('重新发送(60s)');
- $self[0].disabled = 'disabled';//禁止按钮的点击默认动作
- //$ChanjetNewCodeInput[0].disabled = "disabled";
- intervalHook = setInterval(SMSbtnTiming, 1000);
- enAbleNextBtn($inputTF);
- $inputTF.removeAttr('disabled');
- $inputTF.focus();
- } else {
- console.log(data);
- var date = new Date();
- console.log(date);
- if (data.errorMessage.indexOf('绑定') != -1) {
- setOldMobileMsg($oldMobileError, data.errorMessage);
- } else {
- $spanHint.text(data.errorMessage);//数量超出限制
- $spanHint.addClass(CodeErrorMsg_class);
- $spanHint.show();
- }
- //setTimeout(restoreSpanHit, 4000);
- }
- setTimeout(restoreSpanHit, 5000);
- }
- });
3,定时器方法中的this指什么?
js代码:
- var timing2= function () {
- console.log(this);
- console.log('timing');
- clearInterval(a);
- };
- a=setInterval(timing2, 2000);
运行结果:
代码改为:
- var obj={
- time2: function () {
- var timing2= function () {
- console.log(this);
- console.log('timing');
- clearInterval(a);
- };
- a=setInterval(timing2, 2000);
- }
- };
- obj.time2();
结果也一样
解决方法:
抽取出来一个方法:
- SMSbtnTimingCommon: function (me) {//定时器的方法
- //me._data=me._data||{};
- //console.log(me);
- var $self = $('#getAuthCodeBtn');
- if (me._data.bind.secondCount === 0) {
- var intervalHookTmp = me._data.bind.intervalHook;
- if (intervalHookTmp) {
- console.log('me._data.intervalHook:' + intervalHookTmp);
- clearInterval(intervalHookTmp);
- console.log('me._data.intervalHook:' + intervalHookTmp);
- console.log('stop timing');
- me._data.bind.intervalHook = null;
- }
- $self.html('获取验证码');
- sendCodeBtn.enable($self);
- } else {
- //console.log(me._data.secondCount);
- $self.html('重新获取(' + me._data.bind.secondCount + ')');
- me._data.bind.secondCount = me._data.bind.secondCount - 1;
- }
- }
调用:
- var SMSbtnTiming= function () {
- me.SMSbtnTimingCommon(me);
- };