前提・実現したいこと
ある関数がonClickで呼び出され、その関数内で子ウィンドウを開く→呼び出し元の関数終了(return true)と定義したいと考えています。
発生している問題・エラーメッセージ
後述するソースコードのように記載したのですが、promise.doneを待たずに呼び出し元の関数が完了してしまいます。
当方初心者であるため、恐らく記載方法が誤っていると思うのですが、
現状解決しない状態のため、ご助言等頂ければ幸いです。
該当のソースコード
HTML
1<script 2 src="https://code.jquery.com/jquery-3.4.1.js" 3 integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" 4 crossorigin="anonymous"></script> 5<script type="text/javascript"> 6"use strict"; 7 8// 引き継ぐプロパティ変数 9var test = test || {}; 10test.openform = test.openform || {}; 11test.openform.glvars = test.openform.glvars || {}; 12 13test.openform.glvars.url='展開するURL'; 14 15//OnClickでこの関数が呼び出される。 16function PreSaveAction(){ 17 if(true){ 18 // ここでいろいろ画面内処理 19 20 var res = confirm('コピーして編集画面を開きますか?'); 21 if (res){ 22 // 新しいタブで指定のURLを展開 23 var childWindow = open(test.openform.glvars.url, "_blank"); 24 var promise = waitForLoading(childWindow) 25 promise.done(function(){return true}) 26 27 return true; // ←これをpromise.doneの後に戻したい。 28 } 29 30 }else{ 31 return false; 32 } 33} 34 35// 子ウィンドウのローディングを待つ 36function waitForLoading(targetWindow) { 37 var d = $.Deferred(); 38 var interval = setInterval(function(){ 39 if(typeof targetWindow.addEventListener === "function"){ 40 clearInterval(interval); 41 targetWindow.addEventListener("load", function(){d.resolve()}) 42 } 43 },100); 44 return d.promise(); 45} 46 47</script>
試したこと
ES6のPromiseを試しましたが、その場合IE11に対応していないということで断念しています。
また、OnClick内のJSを別関数で定義して対応しようとも考えましたが、OnClick内のJSはPostBackが含まれており、
引数などが流動的であるため、断念しました。
補足情報(FW/ツールのバージョンなど)
jquery-3.4.1.js
対応環境:
IE11の最新Ver
Chromeの最新Ver
以上、有識者の方がいらっしゃれば、どうぞ宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/04 12:07