如何从addEventListener返回值

jdl*_*ung 3 javascript getelementbyid addeventlistener

当用户点击链接时,我使用javascript来捕捉xy定位,到现在为止,我可以使它工作,但我希望它在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>
Run Code Online (Sandbox Code Playgroud)

Jam*_*iec 6

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

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

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

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

}
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 5

你不能

JavaScript无法进行时间旅行。

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

事件处理函数需要处理数据本身,或者调用其他函数来处理数据。数据必须向前传输,而不能返回。