プロが教えるわが家の防犯対策術!

どうしても、うまくいかない部分が2点ありますので分かる方、手直ししていただけないでしょうか?

さまざまなHPを参考にして、下記、ソースを作成しました。
送信aを、
実行すると、新しいウィンドウが開きます。
そして、相手からの受信を待たず、
送信b
を実行すると、
送信aの結果が反映されないことがよくあります。
同一の、ウィンドウに再度表示され、正常に受信終わる前に閉じた状態になるため、エラーになると思っています。
そこで、これを何とか、克服する方法はないものでしょうか?


また、javascriptを用いて、
<form action="url.cgi?acc=■" method="post">
の■の部分を、毎回好きな数字に書き換えたいのですが何か、よい方法はないものでしょうか?

以上2点ありますが、分かる方のみでもとても助かりますので、手直しのほど、何卒、宜しくお願い致します。




<script language=javascript>
function submitByNewWindow(frm) {
window.open('','new','width=500,height=400,left=0,top=0,scrollbars=yes');
frm.target = "new";
frm.submit();
}
</script>

■へ入れる文字→[ ] <BR>

<form action="url.cgi?acc=■" method="post">
<input type="text" name="do" value="a">
<input type="hidden" name="type" value="other">
<input type="button" onclick="submitByNewWindow(this.form);" value="送信a";>
</form>

<form action="url.cgi?acc=■" method="post">
<input type="text" name="do" value="b">
<input type="hidden" name="type" value="other">
<input type="button" onclick="submitByNewWindow(this.form);" value="送信b";>
</form>

A 回答 (4件)

追加のご質問部分ですがいまいち仕様が不明なんですが・・



(1)
送信aなら、入力された文字列の頭にa.を付加する
送信bなら、入力された文字列の頭にb.を付加する

(2)
送信abともに数字と同様に別の場所で入力した英文字xx
とa.またはb.を合成しa.xxまたはb.xxとして送信する
(この場合はa、bはボタンのみでいい感じがしますが・・)

(3)
考えつかないのでご自分でこんな感じという
ソースを提示してください・・


cgiの更新上の問題ですが、
説明不足ですいません、私のご提案させていただいたのは、

現状のスクリプトでは常にnewという名前のウィンドウに開くため、
既にaが実行中の場合にbを押してしまうと、同じnewのウィンドウ名で開こうとしますが
すでに同名のウィンドウがあるため、そのウィンドウを再利用して開いてしまいます。
このため、実行中のaが中断されるという現象であるなら

aの場合はnew_aというウィンドウ、bの場合はnew_bというウィンドウ
というようにもともとa,bで使用するウィンドウを分けたら解決しないかな?ということです。
「ずらす」というのはnew_aが既に開いていれば、
new_bを開く時、top・leftの位置を少し下にずらして
別窓が開いた(2枚開いている)ことが判り易くするためです。

補足お願いします。

.
    • good
    • 0
この回答へのお礼

回答いただきありがとうございました!
また、返信が遅くなり、スミマセン。

回答いただきました、ソースをいろいろいじっていて、無事思い通りの物を作成することができました。
本当に、ありがとうございました!!

お礼日時:2006/08/09 20:34

#2を少し書き換えました。


送信後のフォームに a.**** と残るのを消すようにし
エラートラップにフォーカスを戻す記述を加えました。


<script language=javascript>
function submitByNewWindow(frm,str){
var obj=document.forms[0].fig;
if(obj.value==""||isNaN(obj.value)){
alert("数字を入力してください!!");
obj.value="";
obj.focus();
}else if(frm.elements["do"].value==""){
alert("英字を入力してください!!");
frm.elements["do"].value="";
frm.elements["do"].focus();
}else{
window.open('','new','width=500,height=400,left=0,top=0,scrollbars=yes');
frm.target = "new";
frm.action = "url.cgi?acc=" + obj.value;
frm.elements["do"].value = str + frm.elements["do"].value;
frm.submit();
obj.value="";
frm.elements["do"].value=""
}
}
</script>

<body>

<form>
送信数字→ 
<input type="text" name="fig" value="" maxlength="3" style="width:30px;ime-mode:disabled;text-align:center;" />
</form>

<form action="" method="post">
英語送信→a.
<input type="text" name="do" value="" />
<input type="hidden" name="type" value="other" />
<input type="button" onclick="submitByNewWindow(this.form,'a.')" value="送信 a" />
</form>

<form action="" method="post">
英語送信→b.
<input type="text" name="do" value="" />
<input type="hidden" name="type" value="other" />
<input type="button" onclick="submitByNewWindow(this.form,'b.')" value="送信 b" />
</form>

</body>


もうひとつの問題ですが
>同一の、ウィンドウに再度表示され、
>正常に受信終わる前に閉じた状態になるため、
>エラーになると思っています。

aとbと別ウィンドウを
位置をずらして開いたら解決しませんか?

.

この回答への補足

回答いただきありがとうございます。
また、大幅な改良ありがとうございます!

説明不足ですみませんでした。
a.***
b.***
についてですが、
初めの部分で***の部分を指定すると、それを、すべてのところで適用して欲しいというものです。
ちょうど、送信数字が、すべてのフォームで適用されているように、はじめに、入力すれば、すべて同じようにしたいと考えています。

また、aとbをずらしたら解決するかということに対ですが、IEとFireFoxで試したところ残念ながらうまくいきませんでした。
FireFoxで異なるタブを手前にして、開くと新しいウィンドウを開いてくれてうまくいきましたが、かなり、手間なため、同じ場所に、違うウィンドウをどんどん開くような方法が可能でしたら助かります。

補足日時:2006/08/06 23:06
    • good
    • 0

順番に解決しましょうか・・


まず、追加の部分ですが


<script language=javascript>
function submitByNewWindow(frm,str){
var obj=document.forms[0].fig;
if(obj.value==""||isNaN(obj.value)){
alert("数字を入力してください!!");
}else if(frm.elements["do"].value==""){
alert("英字を入力してください!!");
}else{
window.open('','new','width=500,height=400,left=0,top=0,scrollbars=yes');
frm.target = "new";
frm.action = "url.cgi?acc=" + document.forms[0].fig.value;
frm.elements["do"].value = str + frm.elements["do"].value;
frm.submit();
}
}
</script>

<body>

<form>
送信数字→ 
<input type="text" name="fig" value="" maxlength="3" style="width:30px;ime-mode:disabled;text-align:center;" />
</form>

<form action="" method="post">
英語送信→a.
<input type="text" name="do" value="" />
<input type="hidden" name="type" value="other" />
<input type="button" onclick="submitByNewWindow(this.form,'a.')" value="送信 a" />
</form>

<form action="" method="post">
英語送信→b.
<input type="text" name="do" value="" />
<input type="hidden" name="type" value="other" />
<input type="button" onclick="submitByNewWindow(this.form,'b.')" value="送信 b" />
</form>

</body>

上記のようでよろしいでしょうか?
送信内容は a.**** または b.**** と
hidden の other なります。


.
    • good
    • 0

actionの書換えは以下のような感じかと・・



<script language=javascript>
function submitByNewWindow(frm) {
window.open('','new','width=500,height=400,left=0,top=0,scrollbars=yes');
frm.target = "new";
frm.action="url.cgi?acc="+document.forms[0].fig.value;
frm.submit();
}
</script>
<form>
送信数字→<input type="text" name="fig" value="" /><BR>
</form>

<form action="" method="post">
<input type="text" name="do" value="a" />
<input type="hidden" name="type" value="other" />
<input type="button" onclick="submitByNewWindow(this.form);" value="送信a";>
</form>

<form action="" method="post">
<input type="text" name="do" value="b" />
<input type="hidden" name="type" value="other" />
<input type="button" onclick="submitByNewWindow(this.form);" value="送信b";>
</form>

ただ、

>送信aを、
>実行すると、新しいウィンドウが開きます。
>そして、相手からの受信を待たず、
>送信b
>を実行すると、
>送信aの結果が反映されないことがよくあります。
>同一の、ウィンドウに再度表示され、正常に受信終>わる前に閉じた状態になるため、エラーになると思>っています。

この部分がよくわかりません。
新規画面に何か送信内容を表示するのでしょうか?

.

この回答への補足

回答いただきありがとうございます。
早速試してみました。
actionにつなぐ部分は、ばっちり、動作いたしました。
感激です。ありがとうございます!

>この部分がよくわかりません。
>新規画面に何か送信内容を表示するのでしょうか?
>>>
新規に作成される画面に、表示させます。
送信aであれば、送信aの内容は正常に受信されました。
送信bであれば、送信bの内容は正常に受信されました。
という具合です。
そのため、この画面が現れる前に画面を閉じると、通信が途中で遮断された?
もしくは、単に、送信されなかった?
いずれにしても、正常に、記録されないことがあります。
そのため、新しい画面に表示結果を出したいわけです。
同一の画面だと、送信aの結果を表示する前に、送信bの当たらしい、ウィンドウが上書きされてしまい正常に動作しない可能性があるためです。


また、大変申し訳ないのですが、actionを教えていただければ自分でできるかと思っていたのですが、できそうにないので、下記も、分かりましたら、宜しくお願い致します。
一つ目の内容
<input type="text" name="do" value="a" />
二つ目の内容
<input type="text" name="do" value="b" />

ですが、実際には、
<input type="text" name="do" value="a.H.K" />
<input type="text" name="do" value="b.H.K" />
という風にしたく思っています。
H.Kという部分が数字の送信と同様に任意に書き換えができるもの。
英語送信→<input type="text" name="do?" value="" /><BR><1234を入れると上記のようになるようしたい。

補足日時:2006/08/06 17:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!