我正在尝试从已成功完成但尚未获得所需结果的数组中删除项目。每次点击具有唯一ID的div时,它应该从数组squaresNotClicked
中删除该唯一ID,当我输出到console
时,我希望它向我显示一次数组,而不是重复自身。我已将我的代码和输出包括在内。
$("#board").on("click", ".boardSquares:not('.clicked')", function( event ) {
$(this).addClass('clicked');
var squaresNotClicked = ['1', '2', '3', '4', '5', '6', '7', '8' ,'9'];
var squaresClicked = new Object();
var square = event.target.id;
if(this.className != 'clicked') {
var removeSquare = "" + square + "" ;
$(this).prepend('<img class="theImg" src="images/X.png" />');
squaresClicked[square] = '1' ;
squaresNotClicked = jQuery.grep(squaresNotClicked, function(value) {
return value != removeSquare;
});
}
function checkArray() {
jQuery.each( squaresClicked, function(i, val) {
console.log(squaresClicked);
});
}
$("body").dblclick(function() {
checkArray();
console.log(squaresNotClicked);
});
});
在此示例输出中,我单击了方形2和3,然后双击以将数组的内容输出到控制台。据我所知,每次都会使用起始值重新分配数组。
Object {2: "1"}
["1", "3", "4", "5", "6", "7", "8", "9"]
Object {3: "1"}
["1", "2", "4", "5", "6", "7", "8", "9"]
如果我移动我在此函数范围之外创建数组var squaresNotClicked
的行并再次单击方块2和3,我会得到此输出:
Object {2: "1"}
["1", "4", "5", "6", "7", "8", "9"]
Object {3: "1"}
["1", "4", "5", "6", "7", "8", "9"]
这接近我想要的但是它会继续将数组输出到控制台,无论我多次点击一个正方形。如果我单击正方形1,2,3,它将把数组输出到控制台3次。如何防止这种情况发生?
答案 0 :(得分:1)
为了防止在控制台中多次显示结果,请将以下代码放在click处理程序之外:
$("body").dblclick(function() {
checkArray();
console.log(squaresNotClicked);
});
点击.boardSquares
后,您会在身体上附加一个新的听众。
答案 1 :(得分:1)
实际上它没有被覆盖,你应该说只用了一次。请记住,每次单击正方形时,都会一次又一次地调用整个事件处理程序。把所有不需要重新定义的东西都放在它之外。这是一个小帮助(未经测试,我让你自己检查):
var squaresNotClicked = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
var squaresClicked = new Object();
$("#board").on("click", ".boardSquares:not('.clicked')", function (event) {
$(this).addClass('clicked');
var square = event.target.id;
if (this.className != 'clicked') {
var removeSquare = "" + square + "";
$(this).prepend('<img class="theImg" src="images/X.png" />');
squaresClicked[square] = '1';
squaresNotClicked = jQuery.grep(squaresNotClicked, function (value) {
return value != removeSquare;
});
}
});
function checkArray() {
jQuery.each(squaresClicked, function (i, val) {
console.log(squaresClicked);
});
}
$("body").dblclick(function () {
checkArray();
console.log(squaresNotClicked);
});
答案 2 :(得分:1)
更改body dubble click事件:
$("body").dblclick(function() {
console.log(squaresNotClicked);
});
此外,在&#34; main&#34;之外移动点击活动!