【发布时间】:2017-03-16 21:04:48
【问题描述】:
问题
我有两个按钮 .btn-previous 和 btn-next。单击其中一个按钮可以从变量var currentNumber = 0, 中加一或减一。但是当用户一直点击到最后一个人的下一个或一直点击到数组中的第一个人时,我看到错误Uncaught TypeError: Cannot read property 'name' of undefined
我试过了:
- 在 if 语句中切换比较运算符
- 隔离可能导致问题的 if 语句部分,
$(".btn-previous span").html(players[currentNumber - 1].name);
$(".btn-next span").html(players[currentNumber + 1].name);
目标
- 当您单击下一个或上一个按钮时,更改名称、描述以及包含数组中下一个和上一个人员名称的按钮文本
- 如果用户在数组的末尾,隐藏下一个按钮,显示上一个
- 如果它们在数组的开头,隐藏上一个按钮,显示下一个
这是问题的 JSFiddle:
https://jsfiddle.net/6xm96vw9/16/
scripts.js
$(function(){
var currentNumber = 0;
// Key players
// Sets the default values as the first key player
$(".player__info--name").html(players[currentNumber].name);
$(".player__info--desc").html(players[currentNumber].description);
$(".btn-next span").html(players[currentNumber + 1].name);
if (currentNumber <= 0) {
$(".btn-previous").hide();
$(".controls__inner").css("justify-content", "flex-end");
} else {
$(".btn-previous").show();
$(".controls__inner").css("justify-content", "space-between");
}
// When a person clicks on the previous button
$(".btn-previous").on("click", function() {
if (currentNumber > 0) {
currentNumber = currentNumber - 1;
$(".btn-previous").show();
$(".btn-next").show();
$(".controls__inner").css("justify-content", "flex-end");
$(".player__info--name").html(players[currentNumber].name);
$(".player__info--desc").html(players[currentNumber].description);
$(".btn-previous span").html(players[currentNumber - 1].name);
$(".btn-next span").html(players[currentNumber + 1].name);
} else {
$(".btn-previous").hide();
$(".btn-next").show();
$(".controls__inner").css("justify-content", "space-between");
}
});
// When a person clicks on the next button
$(".btn-next").on("click", function() {
// It's six because it's zero-indexed
if (currentNumber < 6 ) {
currentNumber = currentNumber + 1;
console.log(currentNumber);
$(".player__info--name").html(players[currentNumber].name);
$(".player__info--desc").html(players[currentNumber].description);
$(".btn-previous span").html(players[currentNumber - 1].name);
$(".btn-next span").html(players[currentNumber + 1].name);
$(".btn-previous").show();
$(".btn-next").show();
$(".controls__inner").css("justify-content", "flex-start");
} else {
$(".btn-previous").show();
$(".btn-next").hide();
$(".controls__inner").css("justify-content", "space-between");
}
});
});
var players = [
{
"id": 1,
"name": "name1",
"description": "description1"
},
{
"id": 2,
"name": "name2",
"description": "description2"
},
{
"id": 3,
"name": "name3",
"description": "description3"
},
{
"id": 4,
"name": "name4",
"description": "description4"
},
{
"id": 5,
"name": "name5",
"description": "description5"
},
{
"id": 6,
"name": "name6",
"description": "description6"
},
{
"id": 7,
"name": "name7",
"description": "description7"
}
]
index.html
<div class="player__info">
<div class="player__info--inner-group">
<div class="player__image--wrapper">
<div class="player__image"></div>
</div> <!-- player__image--wrapper -->
<div class="player__info--inner">
<p class="player__info--header">Key Players</p>
<p class="player__info--name">tk-name</p>
<div class="player__info--group">
<p class="player__info--desc"></p>
</div>
</div> <!-- player__info--inner -->
</div> <!-- player__info--inner-group -->
</div> <!-- player__info -->
<div class="controls">
<div class="controls__inner">
<button class="btn btn-previous">Previous: <span class="is-bold">tk-name</span></button>
<button class="btn btn-next">Next: <span class="is-bold">tk-name</span></button>
</div>
</div>
【问题讨论】:
-
所以检查你是否在最后。如果你是,你要么不增加,要么回到起点。和开头一样......
标签: javascript jquery count increment