我的代码:
$(function() {
$('a.startSlideshow').click(function() {
startSlideShow = window.setInterval(function() { slideSwitch() }, 1000);
});
$('a.next').click(function() {
if (startSlideShow) {
clearInterval(startSlideShow);
}
nextSlide();
});
});
我的意图:
如果用户点击startSlideshow链接,幻灯片功能每1秒执行一次。
如果用户点击下一个链接,幻灯片功能将在已经执行的情况下停止。
为了能够检测到这一点,我将设定的间隔存储为变量。但是,当我检查它时:
if (startSlideShow) {
clearInterval(startSlideShow);
}
它不起作用。现在,如果我点击下一步之前单击开始幻灯片链接,我的代码就可以工作了。但是如果幻灯片放映功能从未启动过(即我从未点击过该链接,而是从头开始点击,则代码失败)。
基本上这会导致代码因为某些原因在没有定义startSlideshow var时中断:
if (startSlideShow) {
clearInterval(startSlideShow);
}
我确实尝试了其他方法来检查是否已设置该变量,但都失败了。怎么解决这个问题?
答案 0 :(得分:3)
我相信你有一个范围问题:
$(function() {
var startSlideShow;
$('a.startSlideshow').click(function() {
startSlideShow = window.setInterval(function() { slideSwitch() }, 1000);
});
$('a.next').click(function() {
if (startSlideShow) {
clearInterval(startSlideShow);
}
nextSlide();
});
});
在点击功能之外定义变量。
答案 1 :(得分:3)
在第一个处理程序之前声明startSlideShow
:
var startSlideShow = null;
稍后再说清楚:
if (startSlideShow) {
window.clearInterval(startSlideShow);
startSlideShow = null;
}
答案 2 :(得分:2)
这是因为你没有声明 startSlideShow ,因此在运行start函数之前它不存在。此时,它变为具有值的全局变量。
您应该将其包含在闭包中并使用 var 声明它。