我在setTimeout函数中不断收到引用错误 以下是javascript文件中的代码
( function( $, undefined ) {
$( document ).ready( init );
function init() {
registerEventListeners();
}
function registerEventListeners() {
$( '.start_countdown').click( handleStart );
$( '.end_countdown').click( handleEnd );
}
var countdown;
var countdown_number;
function handleStart() {
countdown_number = 11;
countdown_trigger(countdown_number);
}
function countdown_trigger() {
if (countdown_number > 0) {
countdown_number --;
document.getElementById('countdown_text').innerHTML = countdown_number;
if (countdown_number > 0) {
countdown = setTimeout('countdown_trigger()', 1000);
}
}
}
function handleEnd() {
clearTimeout(countdown);
}
})( jQuery );
在jade.js文件中:
extends layout
append scripts
script(src='/javascripts/countDownRedirect.js')
block content
h1= title
p Redirecting you to your documents shortly
div
button.start_countdown#start Start Countdown
button.end_countdown#end End Countdown
div#countdown_text Placeholding text
参考错误:'countdown_trigger()'未定义
当页面加载时,一切似乎都能正常工作 单击开始按钮显示10但随后抛出引用错误。 有什么建议吗? 感谢
答案 0 :(得分:3)
当您在setTimeout
中使用引号时,您正在调用eval
,这不是一个好主意。尝试传递对函数的引用而不是字符串:
countdown = setTimeout(countdown_trigger, 1000);
答案 1 :(得分:1)
要解释发生了什么以及为什么它不起作用 - 当您将字符串传递给setTimeout()
时,字符串将在全局范围内由eval()
进行评估。这意味着该全局范围内没有可用的本地函数或变量。由于您的countdown_trigger()
函数是在另一个函数中声明的,因此它不在全局范围内,因此eval()
不可用,因此当您将它传递给{{1}时它不起作用}。
这是永远不会将字符串传递给setTimeout()
的众多原因之一。
而是传递一个真实的函数引用,在当前作用域中进行评估,如下所示:
setTimeout()