我有两个简单的函数,当被调用时,它们会向后移动一个条目,或者在数组中向前移动一个条目。然而,当你到达最后并且所有条目都已经显示时,还有另外一个" undefined"条目。有关如何解决此问题的任何建议吗?
function nextSlide() {
if (slide_no < slides.length) {
slide_no++;
document.getElementById("display").src = slides[slide_no];
document.getElementById("func_slide_desc").innerHTML = desc[slide_no];
document.getElementById("func_slide_name").innerHTML = names[slide_no];
}
else if (slide_no===slides.length){
break;
}
我想我需要写一行来检查是否已经到达阵列的末尾。但我不确定应该如何做到这一点。我尝试过以下操作:
<Pivot>
<PivotItem>
<Listview>
<Listview.Itemtemplate>
<DataTemplate>
<Listview>
但是当我尝试它时,它只是停在第一个条目而nextSlide函数将不再起作用
答案 0 :(得分:1)
问题是,要访问数组元素,您需要索引在0到数组长度之间 - 1。
在您的nextSlide()首次实施中,您将执行以下操作:
function nextSlide() {
if (slide_no < slides.length) {
slide_no++;
这意味着当slide_no等于length-1并且您调用该函数时,if()条件将为true,因为slide_no将小于slides.length。然后你向slide_no添加1,这意味着slide_no现在等于slides.length,你超出索引限制1 - 这就是你得到一个未定义值的原因。 我会像这样重写它
function nextSlide() {
if (slide_no < slides.length - 1) {
slide_no++;
document.getElementById("display").src = slides[slide_no];
document.getElementById("func_slide_desc").innerHTML = desc[slide_no];
document.getElementById("func_slide_name").innerHTML = names[slide_no];
}
}
答案 1 :(得分:1)
删除else if
及其中的所有内容,同时将slide_no < slides.length
替换为slide_no < slides.length - 1
或将行slide_no++
移至if块中的命令末尾。
所以它会解决你的问题。问题是在访问slide_no
数组之前增加slides
。
为了避免执行你不需要在函数中执行break
的事情,只需简单地省略添加任何新代码(仅将代码添加到body中)或将return;
放入else语句中如果你需要从进一步的执行中停止功能。