js代码如下:
(function() {
$.fn.countDown = function(userOptions) {
var defaultOptions = {
duration: 60
},
opt = $.extend({}, defaultOptions, userOptions),
time = opt.duration,
clickFlag = true;
function cd() {
if(time > 0) {
$(this).text('剩余' + time + '秒').css('cursor', 'not-allowed');
setTimeout(cd, 1000);
time--;
clickFlag = false;
} else if(time == 0) {
$(this).text('重新发送验证码').css('cursor','pointer');
time = opt.duration;
clickFlag = true;
}
}
$(this).on({
click: function() {
if(clickFlag == true) {
cd.call(this);
} else if(clickFlag == false) {
alert('不能重复点击!');
}
}
});
};
}());
$(document).ready(function() {
$('#CD_time').countDown({
duration: 120
});
});
经过几个前辈的指点,先修改代码如下:(已能顺利执行)
(function() {
$.fn.countDown = function(userOptions) {
var defaultOptions = {
duration: 60
},
opt = $.extend({}, defaultOptions, userOptions),
time = opt.duration,
clickFlag = true,
_this = this;
function cd() {
if(time > 0) {
$(_this).text('剩余' + time + '秒').css('cursor', 'not-allowed');
setTimeout(cd, 1000);
time--;
clickFlag = false;
} else if(time == 0) {
$(_this).text('重新发送验证码').css('cursor', 'pointer');
time = opt.duration;
clickFlag = true;
}
}
$(this).on({
click: function() {
if (clickFlag == true) {
cd.call(this);
} else if (clickFlag == false) {
alert('不能重复点击!');
}
}
});
};
}());
$(document).ready(function() {
$('#CD_time').countDown({
duration: 120
});
});
因为你调用cd函数时,只有第一次绑定了this,从第二次开始就cd里面的this都变成了window。
你在函数cd的第一行加一句:console.log(this)
打印一下this看看就明白了。
修改方法:
在函数cd外加一句:var _this = this;,
然后把函数cd里面的this都改成_this即可。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。