JavaScript事件侦听器';s函数不';不能在嵌套循环外工作
我在一个有嵌套循环的js项目上工作,我遇到了一个奇怪的情况: 当函数位于嵌套循环中时,例如JavaScript事件侦听器';s函数不';不能在嵌套循环外工作,javascript,Javascript,我在一个有嵌套循环的js项目上工作,我遇到了一个奇怪的情况: 当函数位于嵌套循环中时,例如 window.onload = function() { let board = document.getElementById('board'); for ( let i = 0; i < 9; i++ ) { for ( let j = 0; j < 9; j++ ) { const block = []; block[i, j] = docume
window.onload = function() {
let board = document.getElementById('board');
for ( let i = 0; i < 9; i++ ) {
for ( let j = 0; j < 9; j++ ) {
const block = [];
block[i, j] = document.createElement( 'img' );
block[i, j].src = "empty-block.png";
block[i, j].coordinate_i = i;
block[i, j].coordinate_j = j;
block[i, j].addEventListener('contextmenu', function r_click(event)
{
coordinate_i = event.target.coordinate_i;
coordinate_j = event.target.coordinate_j;
block[coordinate_i, coordinate_j].src="flag.png";
event.preventDefault();
});
board.appendChild(block[i, j]);
}
}
}
这个函数不起作用
我可以得到这些事件的解释吗?它不起作用,因为函数r\u click是内联定义的。如果您将它作为一个单独的函数拉出,并使用它的名称绑定两个事件,那么它将工作 这是内联定义请注意,函数的名称不是必需的,因为函数不需要,因为函数存在于处理程序中
block[i, j].addEventListener('contextmenu', function (event)
{
coordinate_i = event.target.coordinate_i;
coordinate_j = event.target.coordinate_j;
block[coordinate_i, coordinate_j].src="flag.png";
event.preventDefault();
});
这与上面的代码相同,但该函数实际上可以从其他地方访问
function r_click(event){
coordinate_i = event.target.coordinate_i;
coordinate_j = event.target.coordinate_j;
block[coordinate_i, coordinate_j].src="flag.png";
event.preventDefault();
}
window.onload = function() {
//....code here ....
block[i, j].addEventListener('contextmenu',r_click);
//...more code here
}
您试图通过此
块[i,j]
访问什么?添加完整的相关代码(包括“循环”)这看起来不像有用的语法:块[i,j]
。。。逗号运算符意味着这应该只是访问块[j]
始终。。。您确定已在此处正确复制了代码吗?如果您试图访问嵌套阵列,请使用this
或event.target
引用事件目标。不幸的是,这仍然不起作用。只有在第一个示例中的情况下,代码才能按预期运行。您正在使用代码执行一些非常模糊的操作。除非你提供更多关于模块的信息,否则我无法进一步帮助你
function r_click(event){
coordinate_i = event.target.coordinate_i;
coordinate_j = event.target.coordinate_j;
block[coordinate_i, coordinate_j].src="flag.png";
event.preventDefault();
}
window.onload = function() {
//....code here ....
block[i, j].addEventListener('contextmenu',r_click);
//...more code here
}