質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1360閲覧

ページの要素をクリックしたときの外側のタグのonclick要素を発火させたい

kokorin

総合スコア73

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/07 04:20

実現したいこと

Twitterやfacebookのシェアボタンをサイトに設置しました.
それらのボタンをクリックしたときに共通して実行したい動作があるのですが,どのように実装したらよいでしょうか.

Twitterのボタンを押しても,Facebookのボタンを押しても,同じ処理が実行されるというものです.
イメージ説明

試したこと

親要素divにonclick属性を追加

Twitterやfacebookのボタンをdivタグで囲い,そのdivタグにonclickで動作を追加したのですが,ボタンを押したときにonclickの処理が実行されません.
ボタンの少し外側をクリックするとonclickの処理が実行されます.
実際のコードは次のような感じです.

html

1<div id="snsbtns" onclick="alert('foooooooo')"> <!-- ←← 実行したい処理 --> 2 <div class="snsbtn"> 3 <!-- Twitterのボタン --> 4 <a href="https://twitter.com/share?ref_src=twsrc%5Etfw" class="twitter-share-button" 5 data-show-count="false">Tweet</a> 6 <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 7 </div> 8 9 <div class="snsbtn"> 10 <!-- facebookのボタン --> 11 <div id="fb-root"></div> 12 <script async defer crossorigin="anonymous" src="https://connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v8.0" nonce="OooKwPjc"></script> 13 <div class="fb-share-button" data-href="https://developers.facebook.com/docs/plugins/" data-layout="button" data-size="small"> 14 <a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fplugins%2F&amp;src=sdkpreparse" class="fb-xfbml-parse-ignore">シェア</a> 15 </div> 16 </div> 17</div>

JavaScriptでonclick属性をiframeに追加

また,TwitterやfacebookのボタンはJavaScriptで生成しているみたいなので,
生成されたものを見ると,次のようになっていました.

HTML

1<!-- TwitterのJavaScriptで生成されたもの --> 2<iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" 3 class="twitter-share-button twitter-share-button-rendered twitter-tweet-button" 4 style="position: static; visibility: visible; width: 62px; height: 20px;" title="Twitter Tweet Button" 5 src="https://platform.twitter.com/widgets/tweet_button.2d7d9a6d04538bf11c7b23641e75738c.en.html#dnt=false&amp;id=twitter-widget-0&amp;lang=en&amp;original_referer=file%3A%2F%2F%2FC%3A%2FUsers%2Ftaihara%2FDocuments%2Fjt-development%2Findex.html&amp;size=m&amp;time=1599451037840&amp;type=share&amp;url=file%3A%2F%2F%2FC%3A%2FUsers%2Ftaihara%2FDocuments%2Fjt-development%2Findex.html"> 6</iframe>

どうやら,iframeでその中にボタンが生成されているみたいです.
そこで,JavaScriptを使ってiframeのonclick要素を操作するコードを書いてみたのですが,こちらも動作しません.

HTML

1<script> 2 document.getElementsByTagName('iframe')[0].onclick = function() { 3 alert('foooooooo'); 4 }; 5 document.getElementsByTagName('iframe')[1].onclick = function() { 6 alert('foooooooo'); 7 }; 8</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

iframe側に書かないと反応しないのでは?

投稿2020/09/07 04:41

yambejp

総合スコア114968

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/09/07 04:41

<style> iframe{height:100px;width:100px;bordersolid 1px;} </style> <script> window.addEventListener('DOMContentLoaded', ()=>{ window.addEventListener('click',e=>{ console.log("window"); }); document.querySelector('iframe').addEventListener('click',e=>{ console.log("iframe"); }); }); </script> <iframe></iframe>
kokorin

2020/09/07 05:41

回答ありがとうございます. iframeの中でクリックされたイベントのプロパゲーションはiframeの中で完結してしまうため,元のページのイベントが発火しないということなのでしょうか. また,ご教授いただいたコードをindex.htmlに張り付けてもconsole.logイベントは依然として動かないのですが,iframeの中にこのようなコードを書く必要があるということですか?
yambejp

2020/09/07 05:49

こういうことです //index.html <style> iframe{height:100px;width:100px;bordersolid 1px;} </style> <script> window.addEventListener('DOMContentLoaded', ()=>{ window.addEventListener('click',e=>{ console.log("window"); }); document.querySelector('iframe').addEventListener('click',e=>{ console.log("iframe"); }); }); function test(){ console.log("test"); } </script> <iframe src="iframe.html"></iframe> //iframe.html <script> window.addEventListener('click',e=>{ parent.test() }); </script> test
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問