【发布时间】:2016-07-19 13:30:26
【问题描述】:
我从堆栈中的一项开始ar。
我打算代码做的是:如果用户点击正确的链接(一台计算机已随机选择),我们继续到下一个“级别”,我们在堆栈中再添加一个元素。
在下一个级别中,用户必须按照它们在堆栈中的顺序选择 2 个正确的链接。一旦用户这样做,他应该进入下一个级别,依此类推。类似于西蒙说的游戏,我只是想用这个来模仿游戏的基本逻辑。
HTML:
<a href="javascript:void(0);" id="l1">Link 1</a>
<a href="javascript:void(0);" id="l2">Link 2</a>
<a href="javascript:void(0);" id="l3">Link 3</a>
<a href="javascript:void(0);" id="l4">Link 4</a>
<div id="log"></div>
Javascript
function check() {
var index = 0;
$('body').click(function(event) {
var log = $('#log');
alert(index);
if ($(event.target).is(ar[index])) {
log.html(index + ' ' + event.target.id + ' was clicked.');
index++;
if (index === ar.length) {
//if all clicked elements corresponded to correct
//order in array and reached end of array
level +=1;
console.log("Passing to next level. ", level);
randomId();
console.log(ar);
log.html(ar);
check();
}
}
else {
log.html(index + ' ' + event.target.id + ' was clicked. Is wrong');
index = 0;
}
});
}
var ar = [];
divIds = ["#l1", "#l2", "#l3", "#l4"];
level = 1;
randomId();
check();
function randomId() {
var min = 0;
var max = 3;
var id = Math.floor(Math.random() * (max-min+1)) + min;
var selectedId = divIds[id];
ar.push(selectedId);
alert(ar);
}
但是,当我第二次调用 check() 函数时(当我们移动到堆栈中有 2 个元素的级别 2 时)尽管 var index = 0 是check() 函数。
我正在使用 console.log 和 alert 来捕获 index 的值,但它们的数量让我感到困惑。通过查看警报弹出窗口的数量,我的检查功能似乎就像一个循环。为什么我们在第二次调用该函数时没有得到一个干净的状态?
【问题讨论】:
-
每次调用
check()时,都会向<body>添加一个附加 事件处理程序。之前check()调用中的处理程序不会神奇地消失。 IE。在两次调用check()之后,单击<body>将执行两个事件处理程序。如果这是问题所在,请在绑定新的事件处理程序之前删除现有的事件处理程序。 -
为什么要一遍又一遍地附加点击处理程序?
标签: javascript jquery