[解決済み] addEventListener と getElementsByClassName を使って要素 id を渡す。
2022-02-11 12:38:31
質問
JSONファイルから項目のリストを定義し、そのリストをウェブページに表示しています。ユーザーがリストの項目をクリックすると、その項目に関する詳細情報(同じJSONファイルに保持されている情報)が表示されるようにするためです。
このリストのすべての項目は同じクラスのメンバーであり、それぞれはJSONファイルから定義された一意のIDを持っています。HTMLは以下のような感じです。
<ul>
<li class="menu" id="bob">Robert Smith</li>
<li class="menu" id="jane">Jane Doe</li>
<li class="menu" id="sue">Susan Carter</li>
</ul>
というようなものを使おうと思っていました。
var userSelection = document.getElementsByClassName('menu');
とともに
userSelection.addEventListener('click', myFunctionToPrintDetails());
が、どの詳細を印刷するかを決定するために、イベントリスナーからprint関数にidをどのように渡せばよいのかがわかりません。
私はHTML/CSSの経験は豊富ですが、JSON/AJAXの経験はほとんどないので、おそらく私はこのことについて完全に基本的に逆行しています。もしこれを行うためのより適切な方法があれば、私はフィードバックにオープンです。
両方の回答を試しましたが、どちらもうまくいきませんでした。userSelection.lengthをコンソールにログ出力すると0、userSelectionをログ出力すると...。
HTMLCollection(0)
> sue: li#sue.menu
length: 3
> jane: li#jane.menu
> bob: li#bob.menu
> 0: li#bob.menu
> 1: li#jane.menu
> 2: li#sue.menu
解決方法は?
var userSelection = document.getElementsByClassName('menu');
for(var i = 0; i < userSelection.length; i++) {
(function(index) {
userSelection[index].addEventListener("click", function() {
console.log("Clicked index: " + index);
})
})(i);
}
コメントで @torazaburo さんが指摘しているように、対応したいブラウザが JavaScript の最新版である ECMAScript 6 (ES6) に準拠している場合は、以下を利用することができます。
var userSelection = document.getElementsByClassName('menu');
for(let i = 0; i < userSelection.length; i++) {
userSelection[i].addEventListener("click", function() {
console.log("Clicked index: " + i);
})
}
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み] ループ内のJavaScriptクロージャ - シンプルな実用例