我有这些javascript代码行在页面加载时运行:
(function my_function() {
//my stuff
})();
$("select#myselect").change( function() {
if ($('select#myselect').val() == '1') {
timer = setTimeout(my_function, 1000*5); //this line throws the error
} else {
if(typeof timer !== 'undefined'){
clearTimeout(timer);
}
}
});
当执行突出显示的行时,它会抛出: “未捕获的ReferenceError:my_function未定义”
我该如何解决?
答案 0 :(得分:1)
尝试改变这一点:
(function my_function() {
//my stuff
})();
对此:
function my_function() {
//my stuff
}
my_function();
编辑:您的函数my_function
在全局范围内无法调用,因为此模式会创建本地范围。阅读this优秀的wiki文章了解更多信息。
答案 1 :(得分:1)
看起来你正试图先运行my_function,然后再用计时器再次运行它。
function my_function() {
//my stuff
}
my_function();
$("select#myselect").change( function() {
if ($('select#myselect').val() == '1') {
timer = setTimeout(my_function, 1000*5); //this line throws the error
} else {
if(typeof timer !== 'undefined'){
clearTimeout(timer);
}
}
});
答案 2 :(得分:0)
你有什么称为闭包,你无法访问它(按设计)。试试这个(还有一些额外的改进...
function my_function() {
//my stuff
}
// Call your function...
my_function();
var $mySelect = $("select#myselect");
$mySelect.on("change", function() {
if ($mySelect.val() == '1') {
timer = setTimeout(my_function, 1000*5); //this line throws the error
} else {
if(typeof timer !== 'undefined'){
clearTimeout(timer);
}
}
});
我还将select#myselect
的查找缓存到变量中......因为它会提高性能(诚然,略有差异)。此外,我为您的更改活动使用了更首选和更新的on()
方法。
希望这有帮助!