同じクラスを持つ要素にクリックイベントリスナーを追加する
2023-10-30 23:14:52
質問
idを削除するためのリストビューを持っています。特定のクラスを持つすべての要素にリスナーを追加し、確認のアラートを出したいと思います。
私の問題は、これが見つけたクラスを持つ最初の要素にのみリスナーを追加しているように見えることです。私は使用しようとしました
querySelectorAll
を使おうとしましたが、うまくいきませんでした。
var deleteLink = document.querySelector('.delete');
deleteLink.addEventListener('click', function(event) {
event.preventDefault();
var choice = confirm("sure u want to delete?");
if (choice) {
return true;
}
});
リスト
<?php
while($obj=$result->fetch_object())
{
echo '<li><a class="delete" href="removeTruck.php?tid='.$obj->id.'">'.$obj->id.'</a>'
. '<a href="#" class="delete"></a>
</li>'."\n";
}
/* free result set */
$result->close();
$mysqli->close();
?>
どのように解決するのですか?
この場合
querySelectorAll
. これは NodeList を返しますが
querySelector
は最初に見つかった要素だけを返します。
var deleteLink = document.querySelectorAll('.delete');
そうすると、ループすることになります。
for (var i = 0; i < deleteLink.length; i++) {
deleteLink[i].addEventListener('click', function(event) {
if (!confirm("sure u want to delete " + this.title)) {
event.preventDefault();
}
});
}
また、preventDefaultは、以下の場合にのみ行う必要があります。
confirm === false
.
また、注目すべきは
return false/true
で束縛されたイベントハンドラに対してのみ有効であるということです。
onclick = function() {...}
. 例えば
addEventListening
を使用する必要があります。
event.preventDefault()
.
デモです。 http://jsfiddle.net/Rc7jL/3/
ES6 バージョン
もう少しすっきりさせて(安全な クロージャ・イン・ループ・ワイズ を使うことで、もう少しすっきりさせることができます。 Array.prototype.forEach を使用することで実現できます。
var deleteLinks = document.querySelectorAll('.delete');
Array.from(deleteLinks).forEach(link => {
link.addEventListener('click', function(event) {
if (!confirm(`sure u want to delete ${this.title}`)) {
event.preventDefault();
}
});
});
上の例では Array.from と テンプレート文字列 を ES2015 標準規格から削除しました。
関連
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み] テキストボックスのEnterキーで、JavaScriptでボタンクリックをトリガーする
-
[解決済み] イベントを発生させた要素のIDを取得する
-
[解決済み] jQueryで同じクラスを持つ要素をループさせる
-
[解決済み] クリックイベントのリスナーに'return false'を追加するとどうなりますか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Promise : then vs then + catch [重複].