【发布时间】:2020-11-03 16:46:38
【问题描述】:
我有 2 个事件侦听器,它们都将被点击的元素推送到 2 个单独的数组中。这些console.log 在事件侦听器中按预期运行,但是当我将它们传递给move 函数时,它们都返回未定义。
我已经尝试过将选择的元素也传递给函数,结果相同。
document.querySelectorAll('img').forEach(function(el) {
el.addEventListener('click' , function(params) {
el.classList.add('selected')
selectedPieces.push(el)
console.log(selectedPieces)
moveBy(selectedPieces)
})
})
document.querySelectorAll('.square').forEach(function(el) {
el.addEventListener('click', function() {
el.classList.add('target')
targetPieces.push(el)
console.log(targetPieces)
moveBy(targetPieces)
})
})
function moveBy(selected,target) {
console.log(selected)
console.log(target)
}
【问题讨论】:
-
在您的
click事件监听器中,是否定义了el变量? -
这究竟是如何工作的?
selectedPieces和targetPieces的修改是在(至少)两个不同元素的单击事件处理程序中完成的。而且您只将一个变量传递给moveBy中的任何一个。 -
@taplar 我认为这回答了我的问题,我希望将 selectedPiece 和 targetPiece 传递给 moveBy 函数,在那里我可以处理碎片的移动。我以为我可以从不同的 eventListeners 传入 2 个参数,它会处理它
-
不,函数参数不是这样工作的。对于每次调用,如果您不通过它们,它们就不会通过。没有“我记得你以前传递过这个参数”的逻辑。
-
@taplar 嗯,那会杀死我在这里的代码。回到绘图板!
标签: javascript arrays event-handling