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

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

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

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

jQuery

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

Intra-mart

Intra-martは、 NTTデータの独自フレームワークです。 JavaEEのSeasar2(SAStruts+S2JDBC)ベースであり、 オンプレミスではシステム基盤、クラウド上ではPaaSとして利用出来ます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

4346閲覧

ajaxでダイヤログ内処理の戻り値を返す

hatsuzo

総合スコア56

JavaScript

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

jQuery

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

Intra-mart

Intra-martは、 NTTデータの独自フレームワークです。 JavaEEのSeasar2(SAStruts+S2JDBC)ベースであり、 オンプレミスではシステム基盤、クラウド上ではPaaSとして利用出来ます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/09/18 00:42

いつもお世話になっております。
intramartというフレームワークでの開発で、マスタファイル検索のダイヤログを呼び出して、検索した結果を受け取る、というアプリを作ろうとしています。

ajaxを使ってダイヤログを呼び出すところまではできたのですが、その値を返す時の値のセットのしかたが判りません。
フレームワーク独自のAPIを使っているものの、考え方は普通のajaxでパラメタを渡してダイヤログを呼び出すという点は、通常のjQueryを使って行うのと同じだとは思うのですが、ドキュメントを見ても普通にajaxで行えばと言わんばかりになのか、そこまでは言及されていません。

また、表示したダイヤログも親画面からはボタンがコントロールできるので閉じることは出来ているのですが、閉じるというイベントしか公開されていないため、子画面で閉じようとしているのですが、うまくいきません。

ネットで検索するものの、ここ数日行き詰っており、識者の方のアドバイスをいただければと思い、投稿した次第です。
何らかヒントでも頂ければ幸いです。よろしくお願いします。

html

1<!-- 呼び出し元 --> 2<script type="text/javascript"> 3 $(function() { 4 $('#searchIcon').on('click', function() { 5 //ボタンを表示する例 6 $('<div id="detail_dialog"></div>').appendTo(document.body).imuiPageDialog({ 7 title: '得意先検索', 8 url: 'app/tk_select', 9 parameter: { 10 'imui-theme-builder-module': 'notheme' 11 }, 12 position: [300, 200], 13 modal: true, 14 height: 450, 15 width: 465, 16 buttons: [ 17 { 18 'id': 'okbutton', 19 'text': 'OK', 20 }, 21 { 22 'text': 'キャンセル', 23 'click': function() {$(this).imuiPageDialog('close'); } 24 } 25 ], 26 close : function (event){ 27 $('#detail_dialog').remove(); 28 <!-- ここまでは正常に動作 --> 29 if (pageDialog.trigger) { 30 // ダイアログで操作記録が取られた場合のみ実行 31 $('#tkcd').val(pageDialog.data.ctktkcd); 32 $('#tknm').val(pageDialog.data.ctrtrnm); 33 // 操作記録をクリア 34 pageDialog.trigger = ''; 35 } 36 37 }, 38 //エラーが発生したときに、ボタン表示領域を非表示にする 39 buttonsStateOnError: 'hide' 40 }); 41 42 }); 43 }); 44</script>

html

1<!-- 呼び出し先 --> 2<script type="text/javascript"> 3function Link_url(a, b) { 4 var sel_list = $('#ctktbl').getGridParam('data'); 5 alert(sel_list[a - 1]["ctrtrnm"]); // この値までは正常に取得 6 // ???? この先がよく判りません ???? 7 var res = new Object(); 8 res.tkcd = sel_list[a - 1]["ctktkcd"]; // 返したい値 9 res.tknm = sel_list[a - 1]["ctrtrnm"]; // 返したい値 10 // クライアントにデータを返却 11 var jsonString = ImJson.toJSONString(res); 12 var response = Web.getHTTPResponse(); 13 res.setContentType("application/json; charset=UTF-8"); 14 res.sendMessageBodyString(jsonString); 15 // ウィンドウをクローズ 16 window.close(); 17} 18</script> 19<imart type="imuiListTable" data=DBList id="ctktbl" multiSelect="false" width="440" height="450" > 20 <cols> 21 <col name="ctktkcd" caption="コード" width="100"> 22 <callFunction name="Link_url" /> 23 </col> 24 <col name="ctrtrnm" caption="得意先名" width="340" /> 25 </cols> 26</imart> 27

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

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

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

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

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

guest

回答1

0

ベストアンサー

えーと元が長いので抜粋されたのでしょう
必要な情報が消えてますね
その為推測混じりのお話になります
まず

マスタファイル検索のダイヤログ

一応書いておきますが
× ダイヤログ
○ ダイアログ

これは画面の中に重なるように子画面が表示されていますよね(モーダル画面)
これは親画面のボタン?を押下すると

<div id="detail_dialog"></div>のタグにjQueryのimuiPageDialog機能でタグを追加する事で 検索のダイヤログを表示させています。 子画面終了の際は<div id="detail_dialog"></div>の中身を削除しています。

まずOKボタンのイベントから

Javascript

1'id': 'okbutton', 2'text': 'OK', 3'click': function() { 4//----- ここでダイアログの値をグローバルな変数に入れておく 5//----- 処理自体はダイアログ画面が閉じてから行いたいので時間差にする 6setTimeout("OKProcessing()",100); 7//----- これは画面を閉じる処理 8$(this).imuiPageDialog('close'); 9}

これでイベントは取得できるはず
imuiPageDialog

次に値の引き渡しの事だけど

マスタファイル検索のダイヤログ

は親の画面に重なって表示しているだけなので親側で作っておいたグローバルな変数にはアクセスできます。
まずはそこに必要な値を設定
次にダイアログ画面が閉じてから処理したいのでsetTimeoutを使って処理を後伸ばしにします。
こうしないとタグが消えても画面上の再描写が無いので消えた後になりません。
例ですと仮にOKProcessing()をいうファンクションを呼んでいます。
あくまで例なので使われるときには変更して下さい。

投稿2020/09/18 12:43

kuma_kuma_

総合スコア2506

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

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

hatsuzo

2020/09/23 07:28

kuma_kuma_さん お返事が遅れて失礼しました。 コメント頂きまして有難うございました。 ダイヤログ、何気に使っていますが、鉄道のダイヤと同じで、和製英語というか、年配者の発音ですね。ご指摘ありがとうございます。 ソースは確かに省略してあるのですが、必要と思われる情報は省略していないつもりでした。 imuiListDialogというのは、イントラマートというフレームワークが提供しているAPIですので、その内容をご指摘されているのではないかと思います。 だとしたら、jQueryの作法とは違ったことをこのAPIではブラックボックスで行われていることになり、雲をつかむような質問をしたことになりますので、ご容赦下さい。 ご提示いただいた内容のうち、 'id': 'okbutton', 'text': 'OK', 'click': function() { //----- ここでダイアログの値をグローバルな変数に入れておく //----- 処理自体はダイアログ画面が閉じてから行いたいので時間差にする setTimeout("OKProcessing()",100); //----- これは画面を閉じる処理 $(this).imuiPageDialog('close'); } で、「ダイアログの値をグローバルな変数に入れておく」とのことですが、 ダイアログの値は呼び出し元とは別プログラム(別のhtmlとそれに紐付くJacascriptのスクリプト)なので、ajaxを使って何等かのオブジェクトを介してでないと、渡せないと思い込んでいました。 ともあれ、せっかく頂いたヒントも私のつたない知識では、実装に至りませんでした。
hatsuzo

2020/09/25 03:37

当初思っていたクリックでダイヤログを閉じる、ということは出来ませんでしたが、行を選択しておいて、ボタンクリックのイベントで値を返す、まではなんとか下記の方法で出来ました。 呼び出し先のFunctionを呼び出し元で参照できる?というkuma_kuma_さんのヒントのおかげです。 大変助かりました。 ```html <!-- 呼び出し元 --> $(function() { $('#searchIcon').on('click', function() { var sos = $("#section").val(); // 選択された組織コード //ボタンを表示する例 $('<div id="detail_dialog"></div>').appendTo(document.body).imuiPageDialog({ title: '得意先検索', url: 'app/hm_CM010_select', parameter: { 'imui-theme-builder-module': 'notheme', sos : sos }, position: [300, 200], modal: true, height: 450, width: 465, // ***** 以下訂正 ***** buttons: [ { 'id': 'okbutton', 'text': '決定', 'click': function() { var selectedData = getSelectedData(); // 呼出先html内のfunction if (selectedData.ctktkcd) { $("#tkcd").val(selectedData.ctktkcd); // 選択したデータのctktkcdプロパティを追加 $("#tkcd").val(selectedData.ctktkcd); // 選択したデータのctktkcdプロパティを追加 $(this).imuiPageDialog('close'); } else { imuiAlert('選択されていません'); } } }, { 'text': 'キャンセル', 'click': function() {$(this).imuiPageDialog('close');} } ], close : function (event){ $('#detail_dialog').remove(); }, //エラーが発生したときに、ボタン表示領域を非表示にする buttonsStateOnError: 'hide' }); }); }); ``` ```html <!-- 呼び出し先 --> <script type="text/javascript"> function getSelectedData() { var selectedRow = $('#ctktbl').getGridParam('selrow'); var selectedData = $('#ctktbl').getRowData(selectedRow); return selectedData; } </script> <imart type="imuiListTable" id="ctktbl" process="csjs" data=DBList width="440" height="320" multiSelect="false" viewRecords="true"> <cols> <col name="ctktkcd" caption="コード" width="100" /> <col name="ctrtrnm" caption="得意先名" width="340" /> </cols> </imart> ```
kuma_kuma_

2020/09/25 03:50

できたなら良かったです。 ちなみにimuiPageDialogはjQueryの拡張機能なので別の様式にのっとっているわけではないですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問