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('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);