Javascriptのwindow.showModalDialogおよびwindow.openについての質問です。
今まではIEで動かしていたシステムのChromeで動くように修正したいと思っております。
現状だと子画面からの戻り値をreturnValueで値を取得しています。
returnValueで取得する値がコードや名称でjsonで返し、後続の処理で「<json>.コード」のようにして使用しています。
window.showModalDialogの代替え案としてwindow.openで子画面を表示することはでき、子画面での選択した値を親画面の特定の要素に入れることはできましたが、求めてる動作とは違うので、どうにかjsonのような形式で値を返したいです。
window.openで開いた子画面での選択値を、window.showModalDialogのwindow.returnvalueのように指定したもので呼び元に返す方法があればご教示お願い致します。
<呼び元>
//検索画面open
var ret = window.showModalDialog(url, window, param);
//取得値セット
if (ret != null) {
cdObj.value = ret.コード
}
<呼び先>
var ret = { "コード": "", "名称":""}
ret.コード = document.getElementById("code" + selectIdx).value;
ret.名称 = document.getElementById("name" + selectIdx).value;
window.returnValue = ret;
window.close();
javascript
1親画面より子画面を呼び出し、子画面で選択した値が、親画面に反映される。 2 3----------------------------------------------- 4画面A(親画面)(A.js) 5//---- * 商品検索ボタン押下 6btnShohinCd.click(function (e) { 7//商品検索画面OPEN 8shohinOpenSearchDispCmn(this, "1") 9}); 10 11//--* 商品検索画面OPEN共通 12function shohinOpenSearchDispCmn(me, mode) { 13// 引数設定 14var ret; 15var cdObj = getObjIDReplace(me, 'btn', 'txt').get(0); 16var hdnObj = getObjIDReplace(me, 'btn', 'hdn').get(0); 17var nmObj = $(me).parents('#trMain').find("[id*=txtShohinNm]").get(0); 18 19// 検索画面呼出 20ret = openShohinSerchBase(cdObj, hdnObj, nmObj, mode); 21 22//戻り値が「NULL」「エラー」の場合処理終了 23if (ret == null) { return false; } 24if (ret.err_msg != "") { return false; } 25 26cdObj.value = ret.コード 27 28} 29----------------------------------------------- 30共通(共通.js) 31function openShohinSerchBase(cdObj, hdnObj, nmObj, mode, searchFlg) { 32//パラメータ設定 33var url = "~"; //子画面URL 34var param = "dialogHeight:~px; dialogWidth: ~px; scroll: 0; status: 0; resizable: 0;"; 35 36//検索画面OPEN 37var ret = openSerchDispCmn(url, param, cdObj, hdnObj, nmObj); 38if (ret != null) { 39//コードバックアップ 40var cdBk = ret.コード; 41//URL設定 42var url = '~'; 43//引数設定 44var param = { 45コード: ret.コード 46名称: ret.名称 47} 48ret = setDataCmn(url, param, cdObj, hdnObj, nmObj, false) 49 50//コード再設定 51cdObj.value = cdBk; 52hdnObj.value = cdBk; 53} 54 55//項目選択 56selectCharStr(cdObj); 57return ret; 58} 59 60function openSerchDispCmn(url, param, cdObj, hdnObj, nmObj) { 61//検索画面open 62var ret = window.showModalDialog(url, window, param); //画面B(子画面)のURLを引数とし、子画面OPEN 63 64//取得値セット 65if (ret != null) { 66cdObj.value = ret.コード 67} 68//変更チェック設定 69if (ret != null && ret.コード != "") { 70onChkSentaku(cdObj); 71} 72return ret; 73} 74----------------------------------------------- 75画面B(子画面)(B.js)抜粋 76↓子画面で検索し、表示された一覧のコードを選択した際の処理。 77 78var ret = { "コード": "", "名称":""} 79 80ret.コード = document.getElementById("code" + selectIdx).value; 81ret.名称 = document.getElementById("name" + selectIdx).value; 82 83window.returnValue = ret; 84window.close(); 85 86-----------------------------------------------
後続の処理でretを使いたいため、返り値を同じ形式で取得したいです。
ご教示いただきますよう、お願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/23 08:01
2021/08/23 08:22 編集
2021/08/23 08:23
2021/08/23 08:34
2021/08/23 08:54
2021/08/27 15:49