Javascript 如何从addEventListener返回值

Javascript 如何从addEventListener返回值,javascript,getelementbyid,addeventlistener,Javascript,Getelementbyid,Addeventlistener,我使用Javascript捕捉用户单击链接时的x和y位置 我可以让它工作,但我希望它在调用时将这两个值返回到function init() 我怎么做 <script type="text/javascript"> document.addEventListener("DOMContentLoaded", init, false); function init() { var canvas = document.getEl

我使用Javascript捕捉用户单击链接时的
x
y
位置

我可以让它工作,但我希望它在调用时将这两个值返回到
function init()

我怎么做

<script type="text/javascript">

  document.addEventListener("DOMContentLoaded", init, false);

  function init()
  {
    var canvas = document.getElementById("canvas");
    canvas.addEventListener("mousedown", getPosition, false);
    
    // how can I get the return values here?

  }

  function getPosition(event)
  {
    var x = new Number();
    var y = new Number();
    var canvas = document.getElementById("canvas");

    if (event.x != undefined && event.y != undefined)
    {
      x = event.x;
      y = event.y;
    }
    else
    {
      x = event.clientX + document.body.scrollLeft +
          document.documentElement.scrollLeft;
      y = event.clientY + document.body.scrollTop +
          document.documentElement.scrollTop;
    }

    x -= canvas.offsetLeft;
    y -= canvas.offsetTop;

    alert("x: " + x + "  y: " + y); // here can print the correct position
    
    // if I add the two values here, and return them. How can I receive the values in funciton init()
    // var clickPosition={"x":x, "y":y};
    // return clickPosition;
  }

</script>

document.addEventListener(“DOMContentLoaded”,init,false);
函数init()
{
var canvas=document.getElementById(“canvas”);
canvas.addEventListener(“mousedown”,getPosition,false);
//如何在此处获取返回值?
}
函数getPosition(事件)
{
var x=新的数字();
var y=新的数字();
var canvas=document.getElementById(“canvas”);
if(event.x!=未定义&&event.y!=未定义)
{
x=事件x;
y=事件。y;
}
其他的
{
x=event.clientX+document.body.scrollLeft+
document.documentElement.scrollLeft;
y=event.clientY+document.body.scrollTop+
document.documentElement.scrollTop;
}
x-=canvas.offsetLeft;
y-=canvas.offsetTop;
警报(“x:+x+”y:+y);//此处可以打印正确的位置
//如果我在这里添加这两个值并返回它们,我如何在functioninit()中接收这些值
//var clickPosition={“x”:x,“y”:y};
//返回点击位置;
}
你不能

JavaScript不能进行时间旅行

事件处理程序函数在事件发生之前不会运行。到那时,调用
addEventHandler
的函数将完成运行并返回


事件处理函数需要处理数据本身,或者调用其他函数来处理数据。数据必须向前移动,不能向后移动。

如果您有注释,您将永远无法访问变量,事件尚未发生

相反,您可以做的是将匿名函数传递给事件处理程序,调用返回值的方法并根据需要使用它

function init()
{
    var canvas = document.getElementById("canvas");
    canvas.addEventListener("mousedown", function(event){
        var result = getPosition(event);

        // result is your return value
    }, false);

}

另一种方法是

在脚本代码之上初始化变量

<script type="text/javascript">
var paramVal1= null;
var paramVal2 = null;
  document.addEventListener("DOMContentLoaded", init, false);

  function init()
  {
    var canvas = document.getElementById("canvas");
    canvas.addEventListener("mousedown", getPosition, false);

return {x: paramVal1, y: paramVar2};

  }

  function getPosition(event)
  {
    var x = new Number();
    var y = new Number();
    var canvas = document.getElementById("canvas");

    if (event.x != undefined && event.y != undefined)
    {
      x = event.x;
      y = event.y;
    }
    else
    {
      x = event.clientX + document.body.scrollLeft +
          document.documentElement.scrollLeft;
      y = event.clientY + document.body.scrollTop +
          document.documentElement.scrollTop;
    }

    x -= canvas.offsetLeft;
    y -= canvas.offsetTop;

paramVal1 = x;
paramVal2 = y;

    alert("x: " + x + "  y: " + y); // here can print the correct position

    // if I add the two values here, and return them. How can I receive the values in funciton init()
    // var clickPosition={"x":x, "y":y};
    // return clickPosition;
  }

</script>

var paramVal1=null;
var paramVal2=null;
document.addEventListener(“DOMContentLoaded”,init,false);
函数init()
{
var canvas=document.getElementById(“canvas”);
canvas.addEventListener(“mousedown”,getPosition,false);
返回{x:paramVal1,y:paramVar2};
}
函数getPosition(事件)
{
var x=新的数字();
var y=新的数字();
var canvas=document.getElementById(“canvas”);
if(event.x!=未定义&&event.y!=未定义)
{
x=事件x;
y=事件。y;
}
其他的
{
x=event.clientX+document.body.scrollLeft+
document.documentElement.scrollLeft;
y=event.clientY+document.body.scrollTop+
document.documentElement.scrollTop;
}
x-=canvas.offsetLeft;
y-=canvas.offsetTop;
参数1=x;
paramVal2=y;
警报(“x:+x+”y:+y);//此处可以打印正确的位置
//如果我在这里添加这两个值并返回它们,我如何在functioninit()中接收这些值
//var clickPosition={“x”:x,“y”:y};
//返回点击位置;
}

我认为你的问题是错的。您不能向注释返回两个值,因为您没有在那里调用函数-您正在注册一个事件Listener。。。。