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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1889閲覧

iframeの親から子へtriggerしたい

takushi168

総合スコア228

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/09/03 08:13

前提・実現したいこと

iframe構造のHTMLがあり
(以下、iframe設置側を親、iframeに呼び出されているページを子とする)
子に設定されているイベントを親側から発生させたい

発生している問題・試したこと

子側でのイベントは正しく設定されており、子自身によるtriggerであれば期待通りに動作します。
それと似た形で親から同じようにtriggerしたいのですが、うまく動きませんでした。(下記コードの①)

いろいろ調べてこちらを参考にしてみましたが、これもうまくいきません。(下記コードの②)
解釈が間違っているのでしょうか…。
https://qiita.com/MasamotoMiyata/items/7d832a363ce3bbd245ac

OSはWindows10、ブラウザは以下で確認しています。

  • GoogleChrome 68.0
  • Firefox 61.0

該当のソースコード

【iframeの親】test.html(body内抜粋)

HTML

1<!-- iframeで子htmlを呼び出し --> 2<iframe id="testiframe" src="child.html" name="testname"></iframe> 3 4<!-- jQuery読み込み --> 5<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 6<script> 7// 子iframeのロードが完了したら、子の「#clickarea」をダブルクリックしたことにしたい 8$('#testiframe').load(function(){ 9 // この部分をなんとかしたい /////////////////////////// 10 11 // ①単純に、対象のオブジェクトにそのままtriggerを渡してみる 12 //  →反応なし 13 $("#testiframe").contents().find("#clickarea").trigger("dblclick"); 14 15 // ②調べた内容をもとに書き換えてみる 16 //  →エラー「document.testname is undefined」 17 document.testname.$(document.testname.document).find("#clickarea").trigger("dblclick"); 18 19 /////////////////////////////////////////////////////// 20}); 21</script>

【iframeの子】child.html(body内抜粋)

HTML

1<!-- ダブルクリックの対象エリア --> 2<div id="clickarea">ここをダブルクリック</div> 3 4<!-- jQuery読み込み --> 5<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 6<script> 7// ダブルクリックされたときのイベント 8$("#clickarea").on("dblclick", function(){ 9 console.log("ダブルクリックされました"); 10}); 11 12// ここで実行した場合は動く 13// $("#clickarea").trigger("dblclick"); 14</script>

ご存知の方、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 document.querySelector('#testiframe').addEventListener('load', function(){ 4 with(window["testname"]){ 5 HTMLElement.prototype.trigger=function(eventStr){ 6 if (document.createEvent) { 7 var e = document.createEvent("HTMLEvents"); 8 e.initEvent(eventStr, true, true ); 9 return this.dispatchEvent(e); 10 } else { 11 var e = document.createEventObject(); 12 return this.fireEvent("on"+eventStr, e); 13 } 14 }; 15 document.querySelector('#clickarea').trigger('dblclick'); 16 } 17 }); 18}); 19</script> 20 21<iframe id="testiframe" src="child.html" name="testname"></iframe>

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(){ 3 document.querySelector("#clickarea").addEventListener("dblclick", function(e){ 4 console.log("ダブルクリックされました"); 5 }); 6}); 7</script> 8<div id="clickarea">ここをダブルクリック</div> 9

jQueryバージョン

javascript

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script> 3$(function(){ 4 $('#testiframe').on('load', function(){ 5 testname.$('#clickarea').trigger('dblclick'); 6 }); 7}); 8</script> 9<iframe id="testiframe" src="child.html" name="testname"></iframe>

javascript

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script> 3$(function(){ 4 $("#clickarea").on("dblclick", function(){ 5 console.log("ダブルクリックされました"); 6 }); 7}); 8</script> 9<div id="clickarea">ここをダブルクリック</div> 10

投稿2018/09/03 08:51

編集2018/09/03 08:59
yambejp

総合スコア114769

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

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

yambejp

2018/09/03 08:53

前回の質問のtriggerを理解しないままクローズしちゃいましたね
takushi168

2018/09/03 09:37

先ほどに引き続き、ありがとうございます。 取り急ぎ、いただいたコードで最終的に実装したかったものが実現しました。 すみません…何が理解できていないか理解できていない段階かもしれないです…。理解できるよう、もうしばらく色々と調べたり動かしたりしてみます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問