2011-12-15 14 views
0

これがなぜ機能しないのかわかりません。これはおそらく単純なものです。 iframeは親ページと同じドメインからのものです。iframe内の画像のクリックを検出します。

私はjQueryを使用することができますが、私は純粋なJavaScriptでそれを行うことを学びたいと思います。

私のコード今のところ:

document.getElementById('my_iframe').onload = function() { 
    document.getElementById('my_iframe').contentWindow.document.getElementsByTagName('img').onclick = function() { 
     alert("image in iframe was clicked"); 
    } 
} 

答えて

2

秒間フレーム事業を忘れて、このコードを見て:これまでの仕事という意志

document.getElementsByTagName('img').onclick = function() { 

?いいえ、文書内のすべてのimg要素を含むオブジェクト(正確にはNodeList)を取得しています。そのオブジェクトにonclickプロパティを追加しています。要素自体にではなく、それらを指し示すオブジェクトへ。この関数は決してどの要素にも適用されないので、決して起動されません。

通常と同じようにする必要があります。見つけたすべての画像をループして、それらに個別に機能を適用します。

var onclickFn = function() { 
     alert("image in iframe was clicked"); 
    }, 
    images = document.getElementById('my_iframe').contentWindow.document.getElementsByTagName('img'); 

for (var i = 0; i < images.length; i++) { 
    images[i].onclick = onclickFn; 
} 
+0

(私はjqueryの代わりに純粋なjavascriptを学ぼうとしています...) – Hakan

+0

あなたは大歓迎です。 (あなたが知っているのは、上向きの矢印をクリックすることで回答が有効であると考えることができるということです。あなたのプロフィールからあなたは一度も投票していないことが分かりました。気をつけてください!) – lonesomeday

+0

ありがとうlonesomeday、upvotingにチェックします。 – Hakan

1

document.getElementsByTagNameは、画像のコレクションを返しています。コレクション全体でクリックハンドラを設定するだけでは不十分です。一度に1つずつループする必要があります。

var allimgs = document.getElementById('my_iframe').contentWindow.document.getElementsByTagName('img'); 

for (var i = 0; i < allimgs.length; i++) { 
    allimgs[i].onclick = function() { 
     alert("image in iframe was clicked"); 
    }; 
} 
+0

アハア、それはどうやってやるの?非常に知って良い!どうもありがとう! – Hakan

+0

@ハカン - 私の喜び。 –

関連する問題