新たに呼び出された.asp内に別フレームのデータをsubmitするには
[上に]
[前に]
[次に]
げげん
2000/02/03(木) 10:48:51
げん、改めげげんです。(あんまり代わってないか)
ところで質問です。
チャペルさんの質問と類似しているかも知れませんが、
これを、見ても良く分からなかったので、もう一度お願いします。
フレームが3つに切ってあるとして、それぞれに.aspファイルが呼び出されて
初期表示されている状態とします。
2フレーム目は、テーブルで2次元配列を作り、そこにデータを入力すると
します。3フレームに実行ボタン等を配置してあります。
3フレーム目の実行ボタンが押下されたら、2フレーム目で入力された
データを1フレーム目に送りたいのですが、なるべくhidden等を使わずに、
submitしたいのです。
しかも、3フレーム目でボタンが押下された場合に1フレーム目に
新たに別の.aspファイルを呼び出すことになっています。
この別の.asp内に2フレーム目のデータを送りたいのです。
何か方法はありますか?
宜しくお願いします。
げげん
2000/02/03(木) 11:49:53
もひとつ、追加です。
1フレーム目のすでに読み込まれているフォームに対して、
2フレーム目のフォームをsubmitすることはできますか?
以下は正しい文ではありませんが、ニュアンスとして捕らえてください。
*2フレーム目のフォームを1フレーム目のターゲットに設定する。
top.frames[1].forms[0].target="gamen1";
*2フレーム目のフォームを設定したターゲットに対して、submitする。
gamen1=top.frames[1].forms[0].submit();
無責任官庁
2000/02/03(木) 11:56:07
テストしてませんが、二つ思い付きました。
(1)2フレーム目の<FORM>タグに、TARGET="1フレーム目"を付けて、
3フレーム目のボタンの JavaScript で Submit()
(これはいささか自信がない)
(2)3フレーム目のボタンにJavaScriptを書き、
1フレーム目の Location に、GETで2フレーム目のデータを送信する。
parent.1フレーム目.location.href=ASPのアドレス+"?"+2フレーム目のパラーメータ
すいません。追加の部分は理解できませんでした。
上記の(2)で、後ろに1フレーム目のパメータをくっつけたらよいとか…
そういう事ではないですかね?
無責任官庁
2000/02/03(木) 11:57:55
すみません。言葉が変ですね(笑)
パラーメータ→パラメータ
パメータ→パラメータ
手がかじかんで…(謎)
げげん
2000/02/03(木) 13:04:34
まいど、無責任官庁さんありがとうございます。
実は2フレーム目の呼び元.aspは、入力して1フレーム目に情報が渡って、
チェックを走った後に再度2フレーム目に表示するため、固定でターゲットを
指定できないのでした。(すみません。)
で、1の方法は今後の参考に・・・ということで。
2の方法は、2フレーム目のパラーメータの部分は
1つ1つ指定しないとだめですかね?
例えば、行7列19の2次元配列で、各<TD></TD>の中に<INPUT TYPE='text'〜>とか
<SELECT></SELECT>が貼ってある場合、NAMEは「固定文字」+カウンタで指定しているのですが、
これを、全部書かないといけないですか?
〜.location.href="ASPのアドレス
+?txt11=" + 引数(1,1) + "&sel12=" + 引数(1,2) + "〜&txt718=" + 引数(7,18) + "&sel719=" + 引数(7,19) + "";
みたいに。
あと、追加は究極的に言ってしまえば、
top.frames[0].forms[0].???=top.frames[1].forms[0].submit();
みたいなことはできますかってことなんですけど。
1フレーム目のフォーム全体に2フレーム目のフォーム全体を
コピーするみたいなことかな?
とんでもないことを、質問しているような気もしますが、
良く分かっていないので、許してくださいませ。
無責任官庁
2000/02/03(木) 14:03:37
えーと、再びテスト無し情報ですみません(ちょっと忙しいので)
addr = "ASPアドレス" + "?";
itemlength = parent.フレーム.document.フォーム.elements.length;
for(loop = 0;loop < itemlength;loop++){
itemtype = parent.フレーム.document.フォーム.elements[loop].type;
if(itemtype=テキスト){
itemdata = parent.フレーム.document.フォーム.elements[loop].value;
itemname = parent.フレーム.document.フォーム.elements[loop].name;
addr = addr + itemname + "=" + itemdata + "&";
}
if(itemtype=セレクト){
itemselect = parent.フレーム.document.フォーム.elements[loop].selectedIndex;
itemdata = parent.フレーム.document.フォーム.elements[loop].options[itemselect].value;
itemname = parent.フレーム.document.フォーム.elements[loop].name;
addr = addr + itemname + "=" + itemdata + "&";
}
以下続く・・・
}
こんな感じだと、何にでも対応できると思います。
フォームのレイアウトを変更してもプログラムは変えずに済むでしょう。
ただ文法にいまいち自信がないので、リファレンスを参照しながらどうぞ(汗)
なお、上記サンプルは IE3 は不可なので注意です。
あとすみません。elements.type は使った事が無いので値が分かりません。
多分、type= の中身が入っていると思います。
(SELECT は、"select"とか入ってるのかな?alert()とかで出してみてください)
あと、value に2バイト文字があると単純に足すだけじゃまずい気がします。
(いいのかな?確か過去にそういう話題があったような)
もし日本語使うようなら、ここのラウンジを検索してみてください。
>1フレーム目のフォーム全体に2フレーム目のフォーム全体を
>コピーするみたいなことかな?
すみません。誰か助けてください(汗)
私はオブジェクトの理念をいまいち理解してないもんで・・・
げげん
2000/02/03(木) 15:17:40
[[解決]]
こおんな感じで作って動作しました。OKでした。
たぶん無責任官庁さんの言ってることも同じだと思います。
(ちゃんと仕様を書かなかったので、テキストとかセレクトとかよく
わからなかったですよね・・・単純にelementsを取りたかっただけの
ようでした。済みません。)
お忙しいところ、ありがとうございました。
function entrp() {
var tcnt,cnt;
var wstr="";
//フレーム2のテーブルデータの先頭に位置づける
for(tcnt=0;tcnt<top.frames[2].document.fm.elements.length;tcnt++) {
if (top.frames[2].document.fm.elements[tcnt].name=="先頭elementの名称") {
break;
}
}
//変数にデータを格納する
for (cnt=0;cnt<(top.frames[2].document.fm.elements.length-tcnt);cnt++) {
wstr=wstr+"&" + top.frames[2].document.fm.elements[tcnt+cnt].name + "=";
if (top.frames[2].document.fm.elements[tcnt+cnt].value.length==0) {
//何も入力されなかったら
wstr=wstr+"emp";
}
else {
//何か入力されたら
wstr=wstr+top.frames[2].document.fm.elements[tcnt+cnt].value;
}
}
top.frames[1].location.href="gen.asp?mesi=M" + wstr;
return false;
}
[上に]
[前に]
[次に]