アプリ版:「スタンプのみでお礼する」機能のリリースについて

HTMLページ内のタグに対してのイベント

getElementsByTagNameで指定したタグの部分(画像やリンク)をクリックすると関数を呼び出すという動作をやりたいのですが、どうも上手くいきません。

試しに下記のようなプログラムを作ってみたのですが、ページを表示した後すぐにalert関数が呼び出されてしまいます。
あるタグの部分を押したときに関数を呼び出すというやり方を知っている方がおられましたら、ご教授願います。

ひとつひとつにIDを割り当てるというやり方でなくて、タグ別にイベントを判定するやり方を考えています。


<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title></title>
  <script type="text/javascript">
   window.onload = function ini(){
    document.getElementsByTagName("img").onClick = alert("これは画像です");
   }
  </script>
</head>
<body>
 <img src="..." />
 <img src="..." />
 <img src="..." />
 <img src="..." />
</body>
</html>

A 回答 (3件)

>ひとつひとつにIDを割り当てるというやり方でなくて、~~


element.onclick = ~~の方法だと、一つ一つにイベントを割り当てていく方法になります。
(例示の場合、getElementsByTagNameは配列になるので、直接onclickではうまくいかない)

どうせならまとめてひとつのイベントをドキュメントに設定しておけば、代用できると思いますよ。
No1様の方法と同じだけれど、簡略化バージョン。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
</head>
<body>

<div>
<img src="a">
<img src="b">
</div>
<div>
<img src="c">
<img src="d">
</div>

<script type="text/javascript">
<!--
document./*@cc_on @if(1) attachEvent('on' + @else @*/ addEventListener(/*@end @*/'click',
function (evt) {
var t = evt.target || evt.srcElement;
alert(t.nodeName + " / " + (t.src || ""));
}, false);
//-->
</script>

</body>
</html>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

こちらは画像のパスも表示されるのですね。
No.1様のところでも書きましたが、もう少し勉強してから
応用させて頂きたいと思います。

ありがとうございました。

お礼日時:2010/10/13 16:19

単純に直すと以下の通り?



window.onload = function(){
var imgs = document.getElementsByTagName("img");
for(var i=0;i<imgs.length;i+=1){
imgs[i].onclick = function(){
alert("これは画像です。");
}
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます

まさにこういう書き方を知りたかったんです。
No.3様にご指摘いただいていましたが、
getElementsByTagNameで得られるのは配列だということを
分かっていませんでした。

今回のプログラムはこの書き方でいきたいと思います。
ありがとうございました。

お礼日時:2010/10/13 16:25

こもじで onclick 。


//@cc_on
var Handler = function (evt) {
var node = evt./*@if (1) srcElement @else@*/ target /*@end@*/;
var doc = node.ownerDocument;
var win = doc./*@if (1) parentWindow @else@*/ defaultView /*@end@*/;
alert(node.nodeName);
alert(node.tagName);
alert(node.id);

}

document./*@if(1)attachEvent('on'+@else@*/addEventListener(/*@end@*/
'click',Handler, false);
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
onclick ですね。気をつけます。

勉強不足でこの書き方をまだ十分に理解できていないのですが、
これはすべてのタグに対してイベントを割り当てているのですね。
もう少し勉強して今作っているものに応用したいと思います。

ありがとうございました。

お礼日時:2010/10/13 16:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!