2015-11-03 682 views
1

當用戶單擊一個鏈接時,我使用javascript捕獲xy位置,現在,我可以使它成功,但我希望它在調用它時將這兩個值返回到function init() 。我該怎麼做?如何從addEventListener返回值

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

我覺得你的問題是錯誤的。您不能將兩個值返回給您的評論,因爲您沒有在那裏調用該函數 - 您正在註冊一個事件監聽器...... –

回答

3

如果您有評論,您將永遠無法訪問變量,事件尚未發生。

相反,你可以做的是通過一個匿名函數到事件處理程序,調用你的方法,該方法返回一個值,並把它作爲適當

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

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

} 
+0

這適用於我的需要。謝謝。 – jdleung

+0

很酷,很高興它有幫助 – Jamiec

3

你不行。

JavaScript不具備時間旅行能力。

直到事件發生時,事件處理函數纔會運行。到那個時候,名爲addEventHandler的函數將完成運行並返回。

事件處理函數需要處理數據本身,或者調用其他函數來完成它。數據必須向前傳遞,它不能返回。