2012-12-21 106 views
3

我想將一個事件從一個元素委託給另一個元素。我有這個簡單的測試代碼,並且我得到一個異常:Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0在第12行(調度)。我已閱讀this,但它之前的評論線沒有任何區別。我該如何做這項工作?將一個對象的事件委託給另一個對象

代碼:

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="jquery.js"></script> 
    <script> 
    function init(){} 

    function delegator(e){ 
     alert('the first'); 
     var other = document.getElementById('myCanvas2'); 
     //e.trigger = other; 
     other.dispatchEvent(e); 
    } 

    $("#myCanvas").live('dblclick', delegator); 
    $("#myCanvas2").live('dblclick', function(){alert('the second');}); 
    </script> 
    </head> 
    <body> 
    <canvas id="myCanvas" style="width:1200px; height:600px; border: solid black 1px;"></canvas> 
    <canvas id="myCanvas2" style="width:1200px; height:600px; border: solid black 1px;"></canvas> 
    </body> 
</html> 
  • 是很重要的,我認爲所有的信息都將委派的對象,因爲它會與像谷歌地圖帆布或任何其他服務的各種其他對象進行更換。

回答

4
  1. .livedeprecated前一陣子。

  2. 既然你使用jQuery使用.trigger(...)

    function delegator(e){ 
        alert('the first'); 
        $('#myCanvas2').trigger(e); 
    } 
    
    $("#myCanvas").on('dblclick', delegator); 
    $("#myCanvas2").on('dblclick', function(){alert('the second');}); 
    

    演示:http://jsfiddle.net/maniator/zbJBd/

+0

你可能想整個事件對象傳遞給'$ .trigger()',萬一您需要委託處理程序中的事件參數:'$(「#myCanvas2」)。trigger(e)' –

+0

@MattiasBuelens true,updated。^_ ^我忘了你可以通過**整個**事件。 – Neal

+0

非常感謝。只是爲了好奇:我的代碼出了什麼問題? –

相關問題