2009-05-02 13 views
1

私は "Inbox"リンクのコピーを作成する必要があるgmail用のgreasemonkeyスクリプトに取り組んでいます。 cloneNodeの使用は問題ありませんが、実行時にonclickイベントがアタッチされていると思います。したがって、これは2つの部分からなる質問です。 1.ノードにどのイベントが接続されているかを確認する方法はありますか? 2.これらのイベントをコピーする方法はありますか? 私が見つけた最も近いものはjQueryで、私はまだそこに行く準備ができていません。 ありがとう!javascript cloneNodeイベント

答えて

5
  1. 要素のonclick属性を使用して設定されている場合を除きます。
  2. 信頼性がありません(onclick属性をコピーできますが、それが動作するかどうかは、その属性が使用されているかどうかによって異なります)。

あなた自身のclickハンドラを追加して、元のイベントをトリガする方がよいでしょう。他の方法で動作をシミュレートしてください。

+0

私はクリックイベントをシミュレートすると考えましたが、私はそれを行う信頼できる方法を見つけることができません。 – PBG

+2

https://developer.mozilla.org/en/DOM/element.dispatchEvent – Shog9

+0

これは私が探していたものです!元のノードでもクリックを送信できます。 ありがとうございます! – PBG

0

私たちは、この理論を用いてこのようなものを解決することができると思います。

我々はまた、liveLists呼ばれ、JSでのNodeListを持っています。長さが変わるたびに、(length-1)のリスト内の新しい要素に必要な共通イベントをaddEventで確認できます。何と言う

....

0

はここでイベントを追加するためのノードリストを使用した例です。

<body> 
     <div id="one" class="clones" style="background:red;width:100px;height:100px"></div> 
    </body> 

    <script> 

     //Selecor based live list [Advantage] 
     var nodeList = document.getElementsByClassName('clones') 

     //Common Function for nodelist 
     nodeList.addEvents = function(){ 
      nodeList.item(nodeList.length-1).addEventListener('click',function(){ 
        console.log(this.id); 
      }); 
     } 
     nodeList.addEvents(); 

     //Making Clone 
     var _clone = document.getElementsByTagName('div')[0].cloneNode(true); 

     //Changing Id 
     _clone.id="two" 

     document.body.appendChild(_clone); 
     nodeList.addEvents(); 
    </script>