IE3でform.actionを書き換えてもその値でsubmitできない

[上に] [前に] [次に]
mura [E-Mail] 1998/04/11(土) 00:29:24
JavaScriptなんですが、form[0].action という値はこちらのリファレンスによるとR/W(読み書き可)と
なってますよね。でもInternet Explorer 3では確かに書けるんですが、その後submitすると
元の<FORM ACTION="hoge.cgi">の値がそのまま使われてしまいます。
↓こんな感じでデバッグやると確かに書き換わってはいるんですが、ダメなんです。

(HEAD部)
function go() {
document.forms[0].action = "new.cgi";
alert(document.forms[0].action);
return true;
}
(BODY部)
<FORM ACTION="hoge.cgi" METHOD=post TARGET=newwindow>
<INPUT TYPE=submit onClick="return go();" VALUE="Go!!">
</FORM>

「return true;」の代わりに「document.forms[0].submit();」とやって
(TYPE=submitをTYPE=buttonに書き換えて)も同じです。
「onClick="return go(this.form);"」とやってフォームを変数渡しにしてもダメ、
ACTIONの値を指定しなかった場合もダメでした。

なんとかpostメソッドのままで、かつactionの値を関数の中で自由に決められるように
する方法って何かないでしょうか。よろしくお願いします。
(actionの値は数百種類になるので、<SELECT>で選ばせるわけにはいかないのです)

submit時にもう1つウィンドウを開いて、そこにJavaScriptをdocument.writeで
勝手に書いてそのままforms[0].submit();すれば大丈夫だと思うんですが、
もう少しスマートな方法があれば…と思ってます。

もちろんJavaScriptを有効にするという前提での話です。
私の環境はWIN95なんですが、ターゲットはWIN95/Mac、IE3/4 ネスケ3/4です。
(WIN95+ネスケ3/4ではちゃんと動きました)
手元でチェックしたIE3のビルド番号は1300になってます。(Version 3.02  4.70.1300)

PTAN [E-Mail] [HomePage] 1998/04/11(土) 21:57:51
私もこれには参った口です...(--
actionプロパティはNNやIE4では正常に動作しますが、
IE3では変更不可のようです。エラーは出ないのですが。
で、私はどうしたかというと...

(HEAD部)
function go() {
document.form2.text1.value = document.form1.text1.value;
document.form2.submit();
return false;
}

(BODY部)
<FORM NAME="form1" ACTION="hoge1.cgi" onSubmit="return go();">
<INPUT TYPE=text NAME="text1" VALUE="">
<INPUT TYPE=submit VALUE="Go!!">
</FORM>
<FORM NAME="form2" ACTION="hoge2.cgi">
<INPUT TYPE=hidden NAME="text1" VALUE="">
</FORM>

てな感じで、FORMを分けてしまいました。
あまり、スマートでは無いのですが...(^^;

一番スマートなのは、CGI側で、分けてしまう方法でしょう。

mura [E-Mail] 1998/04/24(金) 03:55:55
[[解決]]
遅くなってすみません。

PTANさん回答どうもありがとうございます。
IE4ではちゃんとできるんですね。
でもACTIONでジャンプする先がかなりの数になるので、
1個1個FORMで書くわけにはいかないのです。

結局質問した時に思いついた「IE3の時はwindow.openでウィンドウを開いて、
ダイナミックにHTMLとJavaScriptを書いてonLoad="document.forms[0].submit();"する」
という方法でやるつもりです。
(フレームで割ればウィンドウを作らないで済みますけどとりあえず今回はこれです)

タイトルに書いた問題そのものは解消してないですが、解決マークはつけておきます。
何かいい方法があればいいのですが…。

[上に] [前に] [次に]