我一直在努力解决下面的代码问题,试图弄清楚如何通过每次点击将数据传递给函数。
问题是,只要clickedLinks数组被修改,它就会影响shoplist函数中的passedLinks数组。
我甚至得到a great explanation为什么会发生这种情况,但我无法将其正确应用于我的示例。我尝试在不同的点清除阵列,但这没有成功。我开始怀疑我的代码的整个逻辑是否存在缺陷。
任何帮助都将不胜感激。
以下是代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>
Test 1
</title>
<script src="http://code.jquery.com/jquery-latest.js" type=
"text/javascript">
</script>
</head>
<body>
<div class="items">
<ul>
<li>
<a href="#" id="link1">Link 1</a>
</li>
<li>
<a href="#" id="link2">Link 2</a>
</li>
<li>
<a href="#" id="link3">Link 3</a>
</li>
<li>
<a href="#" id="link4">Link 4</a>
</li>
</ul>
</div>
<script type="text/javascript">
var clickedLinks = [];
var passedItems = [];
// Collect clicked link IDs into an array and pass the array as an argument to shoplist()
$('.items a').click(function () {
if (clickedLinks.indexOf(this.id) != -1) {
var linkIndex = clickedLinks.indexOf(this.id);
clickedLinks.splice(linkIndex, 1);
} else {
clickedLinks.push(this.id);
}
shoplist(clickedLinks);
});
function shoplist(ids) {
passedItems.push(ids);
alert(passedItems);
}
</script>
</body>
</html>
步骤:
预期结果:警报窗口显示“link1,link1,link2”
实际结果:警告窗口显示“link1,link2,link1,link2”
答案 0 :(得分:1)
您按原样推送ids
数组,但稍后会更改。您应该使用slice
推送它的副本。类似的东西:
passedItems.push(ids.slice());
另外,我无法理解if
条款的必要性。如果该项目已存在,则不要添加;或者我错过了什么?
请参阅DEMO。