`

发送短信按钮倒计时

阅读更多

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);
        };

 

 

 

  • 大小: 9.4 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics