[解決済み】JavaScriptのクリックイベントリスナーをクラスで使用する。
質問
現在、クリックされたクラスの属性を取得するためのJavaScriptを書こうとしています。正しい方法でこれを行うには、イベントリスナーを使用する必要があることは分かっています。 私のコードは次のとおりです。
var classname = document.getElementsByClassName("classname");
var myFunction = function() {
var attribute = this.getAttribute("data-myattribute");
alert(attribute);
};
classname.addEventListener('click', myFunction(), false);
クラスの1つをクリックするたびにアラートボックスが表示され、属性を教えてくれると思っていたのですが、残念ながらこれはうまくいきません。どなたか助けていただけませんか?
(
備考
-
でかなり簡単にできますね。
jQuery
が、私なら
NOT
使いたい
)
解決方法は?
これでうまくいくはずです。
getElementsByClassName
は
配列
条件にマッチする要素の配列のようなオブジェクト(editを参照)。
var elements = document.getElementsByClassName("classname");
var myFunction = function() {
var attribute = this.getAttribute("data-myattribute");
alert(attribute);
};
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', myFunction, false);
}
プレーンなJavaScriptで行う必要があるループ部分を、jQueryが代行してくれます。
もし ES6対応 であれば、最後の行を置き換えることができます。
Array.from(elements).forEach(function(element) {
element.addEventListener('click', myFunction);
});
注意: 古いブラウザ (IE6, IE7, IE8 など) では
getElementsByClassName
を返すので
undefined
.
訂正
getElementsByClassName
は配列を返しませんが、ほとんどの場合は HTMLCollection を、いくつかのブラウザでは NodeList を返します (
モジラレフ
). これらの型はどちらも Array-Like ですが (length プロパティを持ち、オブジェクトにインデックスでアクセスできることを意味します)、厳密には Array ではありませんし、Array から継承したものでもありません (Array に対して実行できる他のメソッドがこれらの型に対して実行できないことを意味します)。
ユーザー@さんに感謝 ニモ このことを指摘し、完全に理解するために掘り下げてもらいました。
関連
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。