Javascript 在JQuery中迭代数组中的新事件侦听器

Javascript 在JQuery中迭代数组中的新事件侦听器,javascript,jquery,Javascript,Jquery,我正在用javascript创建一个类似2046的2d游戏 当用户单击一个块时,该块和附近的块都会变成白色。i、 e.单击[3,4],然后[3,3]、[3,4]、[3,5]、[2,4]、[4,4]变为白色 但是,如果附近的块的索引大于正在单击的块,则事件处理程序无法进行这些更改。i、 e.[3,5],[4,4]出现故障 我试图用闭包来包装处理程序,但仍然失败。在什么情况下会这样 另外,问题发生在等待用户选择块的情况下。setBlockx,y函数在假定为块[y][x]时返回null $docum

我正在用javascript创建一个类似2046的2d游戏

当用户单击一个块时,该块和附近的块都会变成白色。i、 e.单击[3,4],然后[3,3]、[3,4]、[3,5]、[2,4]、[4,4]变为白色

但是,如果附近的块的索引大于正在单击的块,则事件处理程序无法进行这些更改。i、 e.[3,5],[4,4]出现故障

我试图用闭包来包装处理程序,但仍然失败。在什么情况下会这样

另外,问题发生在等待用户选择块的情况下。setBlockx,y函数在假定为块[y][x]时返回null

$document.readyfunction{ Game.init; }; var博弈=函数{ var xNumber=5; var-yNumber=5; var块=[]; 函数x,y{ 如果块[y] 如果块[y][x]{ 控制台.日志块[y][x]; [y][x]区块。cssbackground,FFF; } }; 功能更改状态{ 开关状态{ 案例等待\u逻辑\u新\u游戏: $‘板’。宽度50*xNumber; $“板”。高度50*Y编号; 对于设y=0;y当您从DOM中读取时,值被读取为字符串而不是数字。此外,+运算符还充当字符串的concatation运算符

只需将其解析为数字

var sx = +block.attr('data-block-at-x');
样品 $document.readyfunction{ Game.init; }; var博弈=函数{ var xNumber=5; var-yNumber=5; var块=[]; 函数x,y{ 如果块[y] 如果块[y][x]{ 控制台.日志块[y][x]; [y][x]区块。cssbackground,FFF; } }; 功能更改状态{ 开关状态{ 案例等待\u逻辑\u新\u游戏: $‘板’。宽度50*xNumber; $“板”。高度50*Y编号; 对于设y=0;y当您从DOM中读取时,值被读取为字符串而不是数字。此外,+运算符还充当字符串的concatation运算符

只需将其解析为数字

var sx = +block.attr('data-block-at-x');
样品 $document.readyfunction{ Game.init; }; var博弈=函数{ var xNumber=5; var-yNumber=5; var块=[]; 函数x,y{ 如果块[y] 如果块[y][x]{ 控制台.日志块[y][x]; [y][x]区块。cssbackground,FFF; } }; 功能更改状态{ 开关状态{ 案例等待\u逻辑\u新\u游戏: $‘板’。宽度50*xNumber; $“板”。高度50*Y编号; 对于设y=0;y2046? 2048年可能?是的。现在是2048年。我忘了它的名字2046?2048年可能?是的。现在是2048年。我忘了它的名字哦,谢谢!!我认为这是由迭代引起的,但我没有检查任何类型转换问题@Felix只是一个指针,而不是调用setBlocks 5次,将click position发送到它并从那里更新所有5个块。即使答案正确,我个人还是更喜欢Numberblock.attr'data-block-at-x'或parseIntblock.attr'data-block-at-x',10 over+block.attr'data-block-at-x',因为使用+作为前缀通常看起来像是一个遗留错误,而其他前缀对您的操作更为详细。Numberx的行为类似于+x,而parseIntx,10的结果根据输入的不同而不同,请参阅@felix的答案谢谢你的建议:哦,谢谢!!我认为这是由迭代引起的,但我没有检查任何类型转换问题@Felix只是一个指针,而不是调用setBlocks 5次,将click position发送到它并从那里更新所有5个块。即使答案正确,我个人还是更喜欢Numberblock.attr'data-block-at-x'或parseIntblock.attr'data-block-at-x',10 over+block.attr'data-block-at-x',因为使用+作为前缀通常看起来像是一个遗留错误,而其他前缀对您的操作更为详细。Numberx的行为类似于+x,而parseIntx、10的结果根据输入的不同而不同,请参阅@FelixThank you的答案以获取建议: