阻止数组被覆盖或多次调用
Stop array from being overwritten or called multiple times
我正在尝试从数组中删除项,我已经成功地删除了这些项,但没有得到所需的结果。每次单击具有唯一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次。如何防止这种情况发生?
实际上它没有被覆盖,应该说只使用了一次。请记住,每次单击正方形时,都会一次又一次地调用整个事件处理程序。把所有不需要重新定义的东西都放在它之外。这里有一个小帮助(没有测试,我让你自己检查):
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);
});
为了防止在控制台中多次显示结果,请将以下代码放在点击处理程序之外:
$("body").dblclick(function() {
checkArray();
console.log(squaresNotClicked);
});
单击.boardSquares
后,将在主体上附加一个新的侦听器。
更改正文可复制点击事件:
$("body").dblclick(function() {
console.log(squaresNotClicked);
});
此外,将其移出"主"点击事件之外!
相关文章:
- show() 覆盖了多个 AJAX 调用
- ES2015:从覆盖的类调用内部方法
- 调用本机浏览器函数,即使它已被覆盖
- 阻止数组被覆盖或多次调用
- 单击Fancy Box覆盖按钮调用Ajax时,Ajax未按预期工作
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 在 ES6 中调用覆盖方法库
- 主干:调用扩展视图的覆盖 render() 函数
- Android WebView 应该覆盖 UrlLoad,我应该调用超级方法还是只返回 false
- Requirejs jQuery正在覆盖WordPress加载的jQuery,我怎样才能避免这种情况(通过调用noCon
- jQuery UI widget - 如何调用覆盖事件处理程序
- 覆盖方法的 JavaScript 原型调用基方法
- 覆盖函数(例如“alert”)并调用原始函数
- 从 jQuery AJAX 调用返回 Javascript 变量,覆盖以前的 Javascript/JSON 对象
- ajax 正在用多个调用覆盖 XHR 对象 - jQuery
- 如何修改/覆盖由无限 setInterval 调用的 javascript 函数
- 我用PHP调用的数据文件神秘地被更改了.用户是否覆盖了它
- 显示了ajax调用的覆盖层,但在没有ajax的情况下调用时不显示
- 覆盖CRM网格中双击事件调用的标准方法
- 为什么我得到“;超过最大调用堆栈大小”;当我覆盖console.log时