gpt4 book ai didi

JavaScript e 未定义,无法对 mousedown 执行连续操作

转载 作者:行者123 更新时间:2023-11-30 18:23:01 26 4
gpt4 key购买 nike

这是我认为描述此问题所需的所有内容的代码片段。当 mousedown 被激活时,我试图让一个连续的 Action 停止,但我收到错误:

Uncaught ReferenceError: e is not defined
(anonymous function)

我很确定这个错误是由 beginAction 函数引起的,我在引号中有 findClick(e) ,但我不认为 e 在这里正确传递:

function Cell(row, column) {
this.row = row;
this.column = column;
}

function foo(bar) {
//do stuff here
gCanvas.addEventListener("mousedown", beginAction, false);
document.addEventListener("mouseup", endAction, false);
}

function beginAction(e) {
findClick(e);
var findClick_timeout = setInterval("findClick(e)", 50);
}

function endAction(e) {
if (typeof(findClick_timeout) != "undefined"){ clearTimeout(findClick_timeout);}
}

function getCursorPosition(e) {
//finds the cell position here... works
var cell = new Cell(Math.floor(y/cellSize), Math.floor(x/cellSize));
return cell;
}

function findClick(e) {
var cell = getCursorPosition(e);
//do stuff with the cell!!!!!!
}

最佳答案

计时器字符串被转换为函数在全局范围内。这就是为什么你不应该使用它们:

var findClick_timeout = setInterval(function() { findClick(e); }, 50);

这样,那个小匿名函数就可以从创建它的“beginAction”函数访问“e”。然而,当你只传递一个字符串时,运行时会在全局范围内评估它,并且没有“e”在那里。

在较新的浏览器中,有一个称为“绑定(bind)”的函数可以用于此目的:

var findClick_timeout = setInterval(findClick.bind(this, e), 50);

它只是一个工具,基本上可以完成匿名函数的功能。

关于JavaScript e 未定义,无法对 mousedown 执行连续操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11595676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com