私はJSの初心者です-まだ学んでいます。この例に似た解決策を探しています
onclickを使用してアラートに画像のソースリンクを表示します。ただし、ページ上の任意の画像に適用したいので、どの画像にもIDがありません。おそらくこれは神秘的な「これ」のアプリケーションですか?誰か助けてもらえますか?ありがとう!
私があなたの質問を理解しているなら、これはあなたの解決策です、
var img = document.getElementsByTagName('img');
for(var i=0;i<img.length;i++){
alert(img[i].src);
}
いいえ、これはデリゲートイベントリスナーと、イベントがDOM全体に広がる方法と関係があります。
ページ内の要素をクリックすると、click
イベントが生成されます。目的にとって重要なことですが、このイベントは要素に対して発生し、で定義した関数によってキャッチされますonclick
。
ただし、イベントは親にも「バブルアップ」し、onclick
そこで定義されている関数がある場合はそれによってキャッチされます。そして、親の親に、というように続きます。
今、あなたがしなければならないことは、document
オブジェクト自体であるルート要素、またはdocument.body
まだ使用したい場合は要素onclick
(非推奨)でイベントをキャッチすることです。
イベントオブジェクトはonclick関数に渡され、イベントを発生させた元の要素が含まれています。
document.body.onclick = function(e) {
var tgt = e.target || e.srcElement;
if (tgt.tagName === "IMG")
alert(tgt.src);
}
(これe.target || e.srcElement
は、IE <9ではtarget
プロパティが呼び出されるためsrcElement
です。)これが、デリゲートイベントリスナーを定義する方法です。<img>
ご覧のとおり、要素ではなく、共通の祖先で定義されています。
ただし、従来の方法では1つのイベントリスナーしか定義できないため、同じイベントタイプの同じ要素に複数のイベントリスナーを追加できるメソッドclick
など、より新しいものを使用することを強くお勧めします。addEventListener
document.body.addEventListener("click", function(e) {
...
});
Internet Explorer <9ではattachEvent
、を使用する必要があります。これは非常に似ていますが、同じではありません。クロスブラウザソリューションの場合は、jQueryやPrototypeなどの一般的なJSフレームワークを使用します。