我能';不要在Javascript中使用我的函数
我的函数change\u slide()出错。我能';不要在Javascript中使用我的函数,javascript,jquery,Javascript,Jquery,我的函数change\u slide()出错。 ReferenceError:change\u幻灯片未在第24:1行定义。 我的代码在这里: $(document).ready(function() { function change_slide() { number = pclass.charAt(6); number = parseInt(number); if (number == 5) number = 1; e
ReferenceError:change\u幻灯片未在第24:1行定义
。
我的代码在这里:
$(document).ready(function() {
function change_slide() {
number = pclass.charAt(6);
number = parseInt(number);
if (number == 5) number = 1;
else number++;
$('.picks').removeClass(pclass);
pclass = 'bgpick' + number;
$('.picks').addClass(pclass);
}
var random = Math.floor((Math.random() * 5) + 1);
var pclass = 'bgpick' + random;
var number;
$('.picks').addClass(pclass);
setInterval('change_slide()', 3000);
$('.next').on('click', function() {
change_slide();
});
});
单击即可更改幻灯片()。下一步起作用,在setInterval中不起作用。将函数声明从
文档准备函数中取出
也改变
setInterval('change_slide()', 3000);
至
setInterval(change_slide, 3000);
这是修改后的代码
$(document).ready(function() {
var random = Math.floor((Math.random() * 5) + 1);
var pclass = 'bgpick' + random;
var number;
$('.picks').addClass(pclass);
setInterval(change_slide, 3000);
$('.next').on('click', function() {
change_slide();
});
});
function change_slide() {
number = pclass.charAt(6);
number = parseInt(number);
if (number == 5) number = 1;
else number++;
$('.picks').removeClass(pclass);
pclass = 'bgpick' + number;
$('.picks').addClass(pclass);
}
将功能声明从文档准备功能中取出
也改变
setInterval('change_slide()', 3000);
至
setInterval(change_slide, 3000);
这是修改后的代码
$(document).ready(function() {
var random = Math.floor((Math.random() * 5) + 1);
var pclass = 'bgpick' + random;
var number;
$('.picks').addClass(pclass);
setInterval(change_slide, 3000);
$('.next').on('click', function() {
change_slide();
});
});
function change_slide() {
number = pclass.charAt(6);
number = parseInt(number);
if (number == 5) number = 1;
else number++;
$('.picks').removeClass(pclass);
pclass = 'bgpick' + number;
$('.picks').addClass(pclass);
}
当您将字符串参数用于setInterval
时,Javascript代码将在全局环境中执行。您应该传递函数引用而不是字符串,然后在本地环境中对其求值
setInterval(change_slide, 3000);
请注意,您不应在此处的change\u幻灯片
后面加括号。这将立即调用该函数,而不是传递对该函数的引用。当您将字符串参数用于setInterval
时,Javascript代码将在全局环境中执行。您应该传递函数引用而不是字符串,然后在本地环境中对其求值
setInterval(change_slide, 3000);
请注意,您不应在此处的change\u幻灯片
后面加括号。这将立即调用函数,而不是传递对函数的引用。将函数声明置于.ready()
之外。是否尝试将change\u slide的定义移到$(document)之外。ready(..)我认为setInterval接受函数,而不是函数名。尝试将其更改为setInterval(更改幻灯片,3000)
将其更改为setInterval(更改幻灯片,3000)
即可。但问题是,当您向setInterval传递一个字符串时,它会在全局范围内对字符串调用eval
,而change\u slide
仅在文档中定义。ready
@dannybouonocore-Hmm,从来都不知道这一点。谢谢。将函数声明置于.ready()
之外。是否尝试将change\u slide的定义移到$(document)之外。ready(..)我认为setInterval是函数,而不是函数名。尝试将其更改为setInterval(更改幻灯片,3000)
将其更改为setInterval(更改幻灯片,3000)
即可。但问题是,当您向setInterval传递一个字符串时,它会在全局范围内对字符串调用eval
,而change\u slide
仅在文档中定义。ready
@dannybouonocore-Hmm,从来都不知道这一点。谢谢。第一句是正确答案。不需要回答此问题的其余部分。不需要,将函数从ready
中取出将创建一个全局函数。不要落入这个陷阱。解决方案是不使用字符串,这样它就不会绑定到全局范围。请纠正愚蠢的地方——第二段代码被破坏了。支持这一点并不重要wise@Vld例如我有点瞎了。我看不出这是祈祷。apologies@JonathanM第一句话解决了这个问题,但这是一个坏习惯。第一句话是正确答案。不需要回答此问题的其余部分。不需要,将函数从ready
中取出将创建一个全局函数。不要落入这个陷阱。解决方案是不使用字符串,这样它就不会绑定到全局范围。请纠正愚蠢的地方——第二段代码被破坏了。支持这一点并不重要wise@Vld例如我有点瞎了。我看不出这是祈祷。apologies@JonathanM第一句话解决了这个问题,但这是一个坏习惯。这应该是第一句的公认答案。这应该是第一句的公认答案。