- PR -

複数画面時の結果が混在するのは?

1
投稿者投稿内容
なちぐろ
会議室デビュー日: 2005/12/20
投稿数: 7
投稿日時: 2006-08-03 13:46
始めまして。

現在、メイン画面Aとサブ画面Bが存在し、AB別々の情報を表示しています。
※BはA画面より起動されているので同一SESSIONです。
ごく稀に、A画面の結果がB画面に表示されてしまうことがあります。
これはどういった要因で発生することがあるのでしょうか?

自分では、
Aでサーバ要求し、結果が戻る前にAを閉じたので
Bに結果が表示されたのかなと考えたのですが、
どうやら再現しないので違うみたいです。

どなたかアドバイスなどをいただけにでしょうか?
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-08-03 17:02
メイン画面Aのリクエストの結果を
サブ画面Bにに表示させるためには
AのリクエストのターゲットをBにすればいい。
これはよろしいでしょうか。

これを前提に考えますと
メイン画面のボタン
例えば[参照]ボタンをクリックすると
そのボタンに関連した情報がBに表示される
というイベントが画面Aにあると仮定します。

この時のロジックが次のようになっているとき
コード:
<input type="button" value="参照" onClick="viewDetails('00001')">


スクリプトが次のようになっている場合
コード:
function viewDetails(id) {
  document.forms[0].action = "http://---/servlet1?id="+id;
  document.forms[0].target = "subwindow";
  document.forms[0].submit();
}


ここでターゲットが変更されてしまいます。

もし、画面Aにメイン画面が遷移する例えば[次ページ]ボタンがあったりして
これが次のようになっている場合
コード:
<input type="button" value="次ページ" onClick="nextPage()">


スクリプトが次のようになっている場合
コード:
function nextPage() {
  document.forms[0].action = "http://---/servlet2";
  document.forms[0].submit();
}


このボタンを押す前に参照ボタンを押していると
ターゲットがサブ画面Bになってしまっているので
次のページはサブ画面Bに表示されてしまうことになります。



このようなターゲットの操作をどこかで行っていませんか?
なちぐろ
会議室デビュー日: 2005/12/20
投稿数: 7
投稿日時: 2006-08-03 17:40
あすかさん返信ありがとうございます。
あまりにも返信が無いのであきらめかけていました。

あすかさん指摘に近い部分がありましたので記載いたします。

画面Aを表示するとA画面のONLOADイベントで画面Bを【window.open(url,画面B)】で起動しています。
画面Aでの遷移処理はご指摘されたとおりに

>--------------------------------------------------------------------------------
>[次ページ]ボタンコード:
><input type="button" value="次ページ" onClick="nextPage()">
>スクリプトコード:
>function nextPage() {
> document.forms[0].action = "http://---/servlet2";
> document.forms[0].submit();
>}
>--------------------------------------------------------------------------------

で移動となっております。
しかし、B画面は起動時のみA画面から行いますが、その後はB画面での遷移制御を行います。
window.open(〜)メソッドでも、ご指摘の状態になるのでしょうか?

また、ご指摘により気づいた点は、
A画面の遷移処理に明示的に下記行を記載しておけば問題ないのかなと思いました。
document.forms[0].target = "_self";
これって、全く的外れなことを言っているでしょうか?
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-08-03 18:41
ターゲットの指定はフォーム単位で行いますので
もし、B画面でのイベントがA画面のフォームのターゲットに影響を与えた場合等
別のターゲットで遷移したりします。


引用:
A画面の遷移処理に明示的に下記行を記載しておけば問題ないのかなと思いました。
document.forms[0].target = "_self";
これって、全く的外れなことを言っているでしょうか?


いえ、ずばり的を射た答えです。

ターゲットがころころ代わる場合は
確実に自画面に遷移して欲しい場合は
遷移の際に明示的に自画面へターゲットを変更することで
誤動作を防ぐことが出来ます。
(後で見直したときにも理解しやすいかと思います)

[ メッセージ編集済み 編集者: あすか 編集日時 2006-08-03 20:04 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-08-03 18:43
引用:

あすかさんの書き込み (2006-08-03 18:41) より:
いえ、ずばり的を得た答えです。


s/的を得た/的を射た/g

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2006-08-03 18:47 ]
なちぐろ
会議室デビュー日: 2005/12/20
投稿数: 7
投稿日時: 2006-08-03 18:57
あすかさん
的確なアドバイスありがとうございました。
おかげですっきり出来ました。
1

スキルアップ/キャリアアップ(JOB@IT)