我有这段代码:(剥离的部分与问题无关)
$(function() {
mins = 0; //Set the number of minutes you need
//secs = 0;
function Decrement(mins){
var secs = mins * 60;
var currentSeconds = 0;
var currentMinutes = 0;
if(currentSeconds <= 9){ currentSeconds = "0" + currentSeconds; }
secs--;
document.getElementById("commercial").innerHTML = "Please wait "+currentMinutes + ":" + currentSeconds; //Set the element id you need the time put into.
if(secs !== -1){ alert("Done!"); }
}
function runCommercial(time){
$('#commercial').html('Plase wait 8:00');
$('#commercial').attr("disabled", "disabled");
mins = 8;
setInterval('Decrement(8)',1000);
}
$('#commercial').click(function(){
runCommercial(30);
});
});
每当我点击商业按钮时,按钮文本就会被设置为8:00,尽管它不会倒计时,而是它给了我&#34;递减()没有被定义&#34;在firefox的开发控制台中。为什么会发生这种情况?如何解决?
感谢。
答案 0 :(得分:7)
这种情况正在发生,因为 String 'Decrement(8)'
在全局命名空间中eval
,而不在 IIFE 闭包下。
更改
setInterval('Decrement(8)',1000);
要
setInterval(function () {Decrement(8);}, 1000);
对代码进行eval
式解释被认为是不好的做法,尝试始终将函数传递给 setTimeout 和 setInterval 等。