テンプレートタグから複製された要素にイベントリスナーを追加する

user2518044

私は<template>タグを使ってたくさんのDOM要素(それぞれが同じHTML構造を持っています)を作成しています

<template id="weapon-template">
    <div class="button">
        <div class="button-price"  data-price ></div>
        <img class="button-image"  data-image >
        <div class="button-name"   data-name  ></div>
        <div class="button-damage" data-damage></div>
        <div class="button-amount" data-amount></div>
    </div>
</template>

...そしてJavaScriptの数行:

var clone;
var template = document.getElementById( "weapon-template" );

template.content.querySelector( "[data-image]"  ).src = data.prev;
template.content.querySelector( "[data-price]"  ).innerHTML = data.cost + "$";
template.content.querySelector( "[data-name]"   ).innerHTML = data.name;
template.content.querySelector( "[data-damage]" ).innerHTML = data.damage;
template.content.querySelector( "[data-amount]" ).innerHTML = 0;

clone = document.importNode( template.content, true )
this.container.appendChild( clone );

複製された要素にいくつかのイベントリスナーを追加したいと思います。私はインターネットから何も見つけることができず、次のようないくつかのことに疲れました。

template.content.querySelector( "[data-price]" ).addEventListener( "click", action, false );
clone.querySelector( "[data-price]" ).addEventListener( "click", action, false );

...これらはどれも機能しませんでした。私は単に次のようなことをすることができます:

var child  = this.container.childNodes[ 0 ];
var target = child.querySelector( "[data-price]" );

target.addEventListener( "click", action, false );

...しかし、私にとってうまくいかなかったものに似た、別のもっと簡単な方法があるのだろうか。

アビナフ

document.importNodeを使用してテンプレートを「アクティブ化」するまで、そのコンテンツはDOMの一部ではない不活性ノードです。

addEventListenerのドキュメントによると:

イベントターゲットは、ドキュメント内の要素、ドキュメント自体、ウィンドウ、またはイベントをサポートするその他のオブジェクト(XMLHttpRequestなど)です。

したがって、例にイベントリスナー追加することは、テンプレートの内容を複製してドキュメント内の既存のノードに追加するまで機能しません

jQueryを使用する準備ができている場合は、回避策があります。jquery onメソッドを使用したイベント委任を使用して、イベントを親要素にバインドできます。

このようなもの:

$(this.container).on('click', '[data-price]', action);

これが本質的に行うことは、の子からトリガーされているクリックがthis.container親までバブルアップすることです。セレクターの[data-price]アクション基準を満たしている場合は、トリガーされます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレートタグ内のdom要素にイベントリスナーを追加する

分類Dev

複製されたすべての要素にイベントリスナーを追加するにはどうすればよいですか?

分類Dev

動的に作成された要素にイベントリスナーを追加する

分類Dev

カウントされたループとイテレータのリストから要素を削除する

分類Dev

カウントされたループとイテレータのリストから要素を削除する

分類Dev

ES6のテンプレートリテラルで作成された要素に関数/イベントリスナーを追加するにはどうすればよいですか?

分類Dev

Javascriptを使用してAPIからキャプチャされた動的に生成された要素にイベントリスナーを追加します

分類Dev

JQueryを使用して動的に追加された要素にイベントリストナーを追加しますか?

分類Dev

1つの要素にセレクターを持つ複数のイベントリスナーを追加するにはどうすればよいですか?

分類Dev

大きなcsvを正規化されたリレーショナルデータベース(複数のテーブルを含む)にインポートするためのベストプラクティスは何ですか

分類Dev

プロトタイプ内で動的に作成された要素にイベントリスナーを追加するには?

分類Dev

複製されたテンプレートの追加はまだフラグメントタイプです

分類Dev

リストビューのデータテンプレート内から生成されたイベントを効果的に処理する方法

分類Dev

Javascript-ライブ<a>タグにイベントリスナーを追加しますが、イベントリスナーから内部要素を除外します

分類Dev

生成された複数の要素にイベントリスナーを追加します

分類Dev

Dockerコンテナー内で実行されるJVMアプリケーションからグレイログにログを送信するためのベストプラクティスは何ですか?

分類Dev

Django:動的データを含むビューからテンプレートをレンダリングした後、テンプレートは静的なままで、データがデータベースに追加されても変更されません

分類Dev

親にもタグ付けされた動的に追加された子要素のイベントリスナー

分類Dev

jQueryの複製された要素は、削除されてコンテナに2回追加された後、クリックイベントを失います

分類Dev

ネストされた要素に1つのイベントリスナーを追加する方法

分類Dev

DOMに追加する前に、JavaScriptで複製されたhtmlテンプレート要素への参照を保持することは可能ですか?

分類Dev

Polymerのカスタム要素プロパティにイベントリスナーを追加するにはどうすればよいですか?

分類Dev

ListViewPSの選択された列からデータをプルするイベントリスナー

分類Dev

動的に作成されたHTMLリスト要素にイベントリスナーを追加するにはどうすればよいですか?

分類Dev

Reactコンポーネントの要素に手動で追加されたイベントリスナーを手動で削除する必要はありますか?

分類Dev

Libgdx:複数のテクスチャアトラスからソートされたスプライトをレンダリングする

分類Dev

COSで実行されているdocker / composeコンテナからプライベートGoogleコンテナレジストリにアクセスする

分類Dev

動的に作成されたボタンにイベントリスナーを追加する

分類Dev

1つの要素に複数のイベントリスナーを追加する

Related 関連記事

  1. 1

    テンプレートタグ内のdom要素にイベントリスナーを追加する

  2. 2

    複製されたすべての要素にイベントリスナーを追加するにはどうすればよいですか?

  3. 3

    動的に作成された要素にイベントリスナーを追加する

  4. 4

    カウントされたループとイテレータのリストから要素を削除する

  5. 5

    カウントされたループとイテレータのリストから要素を削除する

  6. 6

    ES6のテンプレートリテラルで作成された要素に関数/イベントリスナーを追加するにはどうすればよいですか?

  7. 7

    Javascriptを使用してAPIからキャプチャされた動的に生成された要素にイベントリスナーを追加します

  8. 8

    JQueryを使用して動的に追加された要素にイベントリストナーを追加しますか?

  9. 9

    1つの要素にセレクターを持つ複数のイベントリスナーを追加するにはどうすればよいですか?

  10. 10

    大きなcsvを正規化されたリレーショナルデータベース(複数のテーブルを含む)にインポートするためのベストプラクティスは何ですか

  11. 11

    プロトタイプ内で動的に作成された要素にイベントリスナーを追加するには?

  12. 12

    複製されたテンプレートの追加はまだフラグメントタイプです

  13. 13

    リストビューのデータテンプレート内から生成されたイベントを効果的に処理する方法

  14. 14

    Javascript-ライブ<a>タグにイベントリスナーを追加しますが、イベントリスナーから内部要素を除外します

  15. 15

    生成された複数の要素にイベントリスナーを追加します

  16. 16

    Dockerコンテナー内で実行されるJVMアプリケーションからグレイログにログを送信するためのベストプラクティスは何ですか?

  17. 17

    Django:動的データを含むビューからテンプレートをレンダリングした後、テンプレートは静的なままで、データがデータベースに追加されても変更されません

  18. 18

    親にもタグ付けされた動的に追加された子要素のイベントリスナー

  19. 19

    jQueryの複製された要素は、削除されてコンテナに2回追加された後、クリックイベントを失います

  20. 20

    ネストされた要素に1つのイベントリスナーを追加する方法

  21. 21

    DOMに追加する前に、JavaScriptで複製されたhtmlテンプレート要素への参照を保持することは可能ですか?

  22. 22

    Polymerのカスタム要素プロパティにイベントリスナーを追加するにはどうすればよいですか?

  23. 23

    ListViewPSの選択された列からデータをプルするイベントリスナー

  24. 24

    動的に作成されたHTMLリスト要素にイベントリスナーを追加するにはどうすればよいですか?

  25. 25

    Reactコンポーネントの要素に手動で追加されたイベントリスナーを手動で削除する必要はありますか?

  26. 26

    Libgdx:複数のテクスチャアトラスからソートされたスプライトをレンダリングする

  27. 27

    COSで実行されているdocker / composeコンテナからプライベートGoogleコンテナレジストリにアクセスする

  28. 28

    動的に作成されたボタンにイベントリスナーを追加する

  29. 29

    1つの要素に複数のイベントリスナーを追加する

ホットタグ

アーカイブ