如何从addEventListener返回值

时间:2015-11-03 14:33:41

标签: javascript getelementbyid addeventlistener

当用户点击链接时,我使用javascript来捕获xy位置,到目前为止,我可以使其有效,但我希望它将这两个值返回到{{1当它被调用时。我该怎么办?

function init()

3 个答案:

答案 0 :(得分:5)

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

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

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

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

}

答案 1 :(得分:4)

你不能。

JavaScript不具备时间旅行的能力。

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

事件处理函数需要处理数据本身,或者调用其他函数来完成它。数据必须向前传播,它无法返回。

答案 2 :(得分:0)

另一种方法在这里...

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

<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>