功能没有定义?

时间:2015-01-08 18:01:33

标签: javascript jquery

我有这段代码:(剥离的部分与问题无关)

$(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的开发控制台中。为什么会发生这种情况?如何解决?

感谢。

1 个答案:

答案 0 :(得分:7)

这种情况正在发生,因为 String 'Decrement(8)'在全局命名空间中eval,而不在 IIFE 闭包下。

更改

setInterval('Decrement(8)',1000);

setInterval(function () {Decrement(8);}, 1000);

对代码进行eval式解释被认为是不好的做法,尝试始终将函数传递给 setTimeout setInterval 等。