子孫のイベントリスナーを破壊することなくinnerHTMLに追加することは可能ですか?

マイク:

次のコード例でonclickは、テキスト「foo」を含むスパンにイベントハンドラーをアタッチします。ハンドラは、をポップアップする無名関数ですalert()

ただし、親ノードのに割り当てた場合innerHTML、このonclickイベントハンドラーは破棄されます。「foo」をクリックすると、アラートボックスがポップアップ表示されません。

これは修正可能ですか?

<html>
 <head>
 <script type="text/javascript">

  function start () {
    myspan = document.getElementById("myspan");
    myspan.onclick = function() { alert ("hi"); };

    mydiv = document.getElementById("mydiv");
    mydiv.innerHTML += "bar";
  }

 </script>
 </head>

 <body onload="start()">
   <div id="mydiv" style="border: solid red 2px">
     <span id="myspan">foo</span>
   </div>
 </body>

</html>
ベン・ブランク:

残念ながら、への代入innerHTMLは、追加しようとしても、すべての子要素を破壊します。子ノード(およびそのイベントハンドラー)を保持する場合は、DOM関数を使用する必要があります

function start() {
    var myspan = document.getElementById("myspan");
    myspan.onclick = function() { alert ("hi"); };

    var mydiv = document.getElementById("mydiv");
    mydiv.appendChild(document.createTextNode("bar"));
}

編集:コメントからのボブの解決策。答えを投稿してください、ボブ!それのための信用を得ます。:-)

function start() {
    var myspan = document.getElementById("myspan");
    myspan.onclick = function() { alert ("hi"); };

    var mydiv = document.getElementById("mydiv");
    var newcontent = document.createElement('div');
    newcontent.innerHTML = "bar";

    while (newcontent.firstChild) {
        mydiv.appendChild(newcontent.firstChild);
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

私のインポートステートメントを破壊することは可能ですか?

分類Dev

大きなgitリポジトリのクローンを作成することで外付けHDDを破壊することは可能ですか?

分類Dev

data.frameをインプレースで(破壊的に)変更することは可能ですか?

分類Dev

Ansible-インベントリ内のホストにタグを追加することは可能ですか?

分類Dev

破壊を使用して追加することは可能ですか?

分類Dev

リモートの制御でgitリポジトリを破壊することは可能ですか?

分類Dev

C ++(17)でいくつかのオブジェクトプロパティの破壊的な割り当てに関するイベントをキャプチャすることは可能ですか?

分類Dev

イベントリスナーを外部スクリプトからShadowDOM内の要素にバインドすることは可能ですか?

分類Dev

nodejsの「newListener」イベントのイベントリスナーコールバック内でイベントを発行することは可能ですか?

分類Dev

リストビューの子コンポーネントにイベントを追加するにはどうすればよいですか?リストビューにイベントを追加することはできますか?

分類Dev

Apt-システムを完全に破壊します。完全に再インストールすることは可能ですか?

分類Dev

これを破壊することは可能ですか?

分類Dev

使用されているストレージドライバーに関係なく、Dockerコンテナーのrootfsを取得することは可能ですか?

分類Dev

各リクエストに個別に追加するのではなく、APIゲートウェイのすべてのエンドポイントにヘッダーを追加することは可能ですか?

分類Dev

異なるバージョンのバイナリをHyperledgerFabricに同時にインストールすることは可能ですか?

分類Dev

WCFサービスから定期的なイベントをトリガーすることは可能ですか?

分類Dev

デーモンではなくDocker CLIのみをインストールすることは可能ですか?

分類Dev

破壊の順序を逆にすることは可能ですか?

分類Dev

onClickイベントをnodeMenuButtonに追加することは可能ですか?

分類Dev

nullイベントリスナーを追加(または削除)することはできませんか?

分類Dev

ディレクトリ構造を破壊することなく、ディレクトリサブツリーのすべてのレベルから拡張子でファイルを削除します

分類Dev

Vue.js2のコンポーネントからイベントリスナーにアクセスすることは可能ですか?

分類Dev

兄弟のdivを表示するために、mouseenterイベントをimgに追加することは可能ですか?

分類Dev

このイベントリスナーが、追加される前に送信されたイベントを取得するのはなぜですか

分類Dev

「ロックファイルを削除することは解決策ではなく、システムを破壊する可能性があることに注意してください」を解決するにはどうすればよいですか?

分類Dev

MVC C#のクラスレベルバリデーターにクライアント検証を追加することは可能ですか?

分類Dev

イベントの状態を確認してからリスナーを追加すると、イベントを見逃すことはありますか?

分類Dev

Windowsフォームコントロールの同じインスタンスを複数のコンテナーに追加することは可能ですか?

分類Dev

dayCellで使用可能なスペースに関係なく、ポップアップにすべてのイベントを表示するmoreLinkを追加することはできますか?

Related 関連記事

  1. 1

    私のインポートステートメントを破壊することは可能ですか?

  2. 2

    大きなgitリポジトリのクローンを作成することで外付けHDDを破壊することは可能ですか?

  3. 3

    data.frameをインプレースで(破壊的に)変更することは可能ですか?

  4. 4

    Ansible-インベントリ内のホストにタグを追加することは可能ですか?

  5. 5

    破壊を使用して追加することは可能ですか?

  6. 6

    リモートの制御でgitリポジトリを破壊することは可能ですか?

  7. 7

    C ++(17)でいくつかのオブジェクトプロパティの破壊的な割り当てに関するイベントをキャプチャすることは可能ですか?

  8. 8

    イベントリスナーを外部スクリプトからShadowDOM内の要素にバインドすることは可能ですか?

  9. 9

    nodejsの「newListener」イベントのイベントリスナーコールバック内でイベントを発行することは可能ですか?

  10. 10

    リストビューの子コンポーネントにイベントを追加するにはどうすればよいですか?リストビューにイベントを追加することはできますか?

  11. 11

    Apt-システムを完全に破壊します。完全に再インストールすることは可能ですか?

  12. 12

    これを破壊することは可能ですか?

  13. 13

    使用されているストレージドライバーに関係なく、Dockerコンテナーのrootfsを取得することは可能ですか?

  14. 14

    各リクエストに個別に追加するのではなく、APIゲートウェイのすべてのエンドポイントにヘッダーを追加することは可能ですか?

  15. 15

    異なるバージョンのバイナリをHyperledgerFabricに同時にインストールすることは可能ですか?

  16. 16

    WCFサービスから定期的なイベントをトリガーすることは可能ですか?

  17. 17

    デーモンではなくDocker CLIのみをインストールすることは可能ですか?

  18. 18

    破壊の順序を逆にすることは可能ですか?

  19. 19

    onClickイベントをnodeMenuButtonに追加することは可能ですか?

  20. 20

    nullイベントリスナーを追加(または削除)することはできませんか?

  21. 21

    ディレクトリ構造を破壊することなく、ディレクトリサブツリーのすべてのレベルから拡張子でファイルを削除します

  22. 22

    Vue.js2のコンポーネントからイベントリスナーにアクセスすることは可能ですか?

  23. 23

    兄弟のdivを表示するために、mouseenterイベントをimgに追加することは可能ですか?

  24. 24

    このイベントリスナーが、追加される前に送信されたイベントを取得するのはなぜですか

  25. 25

    「ロックファイルを削除することは解決策ではなく、システムを破壊する可能性があることに注意してください」を解決するにはどうすればよいですか?

  26. 26

    MVC C#のクラスレベルバリデーターにクライアント検証を追加することは可能ですか?

  27. 27

    イベントの状態を確認してからリスナーを追加すると、イベントを見逃すことはありますか?

  28. 28

    Windowsフォームコントロールの同じインスタンスを複数のコンテナーに追加することは可能ですか?

  29. 29

    dayCellで使用可能なスペースに関係なく、ポップアップにすべてのイベントを表示するmoreLinkを追加することはできますか?

ホットタグ

アーカイブ