マンガでよめる痔のこと・薬のこと

質問です。

1つのformで複数のactionを1つの送信ボタンで実行したいと思っています。
やりたいことは、1つのframeから他の2つのframeにデータを渡すことです。

フレームは以下のように3つに分かれています。
<frameset cols="60%, 40%">
<frame name="test1" src="xxxx.php">
<frameset rows="50%, 50%">
<frame name="test2" src="yyyy.php">
<frame name="test3" src="zzzz.php">
</frameset>
</frameset>

xxxx.php内のデータをyyyy.php, zzzzphpの2つに渡したいです。

<script language="javascript">
function send(){
  document.form1.target = "test2";
  document.form1.action = "yyyy.php";
  document.form1.submit();
  document.form1.target = "test3";
  document.form1.action = "zzzz.php";
  document.form1.submit();
}
</script>

<form name ="form1" method="POST" action="yyyy.php">
<input type="hidden" name="string" value="string" >
<input type="button" value="送信" onClick="send()">
</form>


現在、上記のように試したり、過去の質問【一つのformから複数のactionを実行】url:http://okwave.jp/qa/q4234502.htmlを参考にしていますがうまくいきません。

わかる方アドバイスお願い致します。

A 回答 (1件)

nameでの参照が悪いのかもしれません


オブジェクトを直接わたしてみては?

<script>
function send(f){
f.target = "test2";
f.action = "yyyy.php";
f.submit();
f.target = "test3";
f.action = "zzzz.php";
f.submit();
}
</script>

<form method="POST">
<input type="hidden" name="string" value="string" >
<input type="button" value="送信" onClick="send(this.form)">
</form>
    • good
    • 0
この回答へのお礼

うまくできました!!
本当に感謝です。
ありがとうございました。

お礼日時:2011/11/21 02:51

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q1つのformで複数のactionを実行できますか?

フォーム内に商品の購入ボタンがあります。同じフォーム内に商品名でグーグルのサイト内を検索させるボタンを設置し、横に並べることは可能ですか?
フォームの入れ子はよくないようなので、検索をJava scriptでできればよいのですが・・・
スタイルシートではデザイン上無理でした。

<form id="fm" name="fm" action="URL" method="POST">
<input type="hidden" name="shouhinmei" value="商品名">
<input type="hidden" name="kakaku" value="500">
<input type="image" src="kounyuu.gif value="購入">

<form method=get action="http://www.google.co.jp/search">
<input type=hidden class="q" name=q value="商品名"><input type=hidden name=ie value=UTF-8><input type=hidden name=oe value=UTF-8><input type=hidden name=hl value="ja"><input name=btnG type="image" src="検索.gif value="検索"><input type=hidden name=sitesearch value="サイトのURL"></form>
</form>
</form>

+----+  +----+
|購入|  |検索|
+----+  +----+

フォーム内に商品の購入ボタンがあります。同じフォーム内に商品名でグーグルのサイト内を検索させるボタンを設置し、横に並べることは可能ですか?
フォームの入れ子はよくないようなので、検索をJava scriptでできればよいのですが・・・
スタイルシートではデザイン上無理でした。

<form id="fm" name="fm" action="URL" method="POST">
<input type="hidden" name="shouhinmei" value="商品名">
<input type="hidden" name="kakaku" value="500">
<input type="image" src="kounyuu.gif value="購入">...続きを読む

Aベストアンサー

では、以下のような感じで。
なるべく多くのブラウザで動くように書いたつもりですが検証は充分行ってください。

<html>
<head>
<title></title>
<script type="text/javascript">
<!--
function searchGoogle(q) {
document.forms['searchForm'].elements['q'].value=q;
document.forms['searchForm'].submit();
return false;
}
//-->
</script>

</head>
<body>

<form action="URL">
~~
<input type="image" src="kounyuu.gif value="購入">
<a href="http://www.google.co.jp/" onclick="return searchGoogle('商品名')"><img src="検索.gif" border=0></a>
</form>

<form action="http://www.google.co.jp/search" id="searchForm" style="display:none;">
<input type=hidden name="q">
<input type=hidden name=ie value="UTF-8">
<input type=hidden name=oe value="UTF-8">
<input type=hidden name=hl value="ja">
<input type=hidden name=sitesearch value="サイトのURL">
</form>

</body>
</html>

では、以下のような感じで。
なるべく多くのブラウザで動くように書いたつもりですが検証は充分行ってください。

<html>
<head>
<title></title>
<script type="text/javascript">
<!--
function searchGoogle(q) {
document.forms['searchForm'].elements['q'].value=q;
document.forms['searchForm'].submit();
return false;
}
//-->
</script>

</head>
<body>

<form action="URL">
~~
<input type="image" src="kounyuu.gif value="購入">
<a href="http://www.google.co.jp/" onc...続きを読む

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Q1つのform内に2つのsubmitボタンがあり、action属性がそれぞれで異なる場合

一般的な検索画面で、中身はjavaで作っているのですが、

検索して結果が下に一覧で表示され、個々の結果ごとに「修正」「削除」ボタンを作っております。
結果1つを1formとして囲っておりまして、hiddenに一意に識別できるパラメータをvalueを入れて飛ばして、その結果情報を修正できたり削除できたりする機能を作っております。
修正ボタンをクリックした場合と削除ボタンをクリックした場合で呼ばれるServletが異なるのですが、うまくJavascriptを書けておりません。
以下はソースです。ちなみにこの要素の上に検索ボタンがあり、現在の挙動だとなぜか検索条件入力フォームチェック用のJSが呼ばれてしまっております。FireFoxのプラグインに表示されるエラーには何もでませんでした。

*****JSP(view)側*****
<form method="post" onSubmit="return callServlet(this)" id="mstSearchR" name="mstSearchR">
<input type="hidden" id="mdNoH" name="mdNoH" value="???????" /><br>
<input type="submit" id="modify" name="modify" value=" 変更 " /> <input type="submit" id="delete" name="delete" value=" 削除 " />
</form>

*****JS側*****
function callServlet(caller){
caller.modify.onsubmit = function(){
flagD = this.form.modify.disabled;
flag = confirm("修正しますか?");
if(flag == true){
flagD = !flagD;
this.form.modify.disabled = flagD;
this.form.action = "????????????????"
return true;
}
return false;
}

caller.delete.onsubmit = function(){
flagD = this.form.delete.disabled;
flag = confirm("削除しますか?");
if(flag == true){
flagD = !flagD;
this.form.delete.disabled = flagD;
this.form.action = "!!!!!!!!!!!!!!!!"
return true;
}
return false;
}
}

一般的な検索画面で、中身はjavaで作っているのですが、

検索して結果が下に一覧で表示され、個々の結果ごとに「修正」「削除」ボタンを作っております。
結果1つを1formとして囲っておりまして、hiddenに一意に識別できるパラメータをvalueを入れて飛ばして、その結果情報を修正できたり削除できたりする機能を作っております。
修正ボタンをクリックした場合と削除ボタンをクリックした場合で呼ばれるServletが異なるのですが、うまくJavascriptを書けておりません。
以下はソースです。ちなみにこの要素...続きを読む

Aベストアンサー

FormのonSubmitイベントではなく、Buttonのオンクリックイベントにしてはどうでしょうか。
submitを使うのではなくbutton属性に変えて、各Function内で
this.form.submit();
を実行してあげれば問題ないとおもいます。

---
<form method="post" id="mstSearchR" name="mstSearchR">
<input type="hidden" id="mdNoH" name="mdNoH" value="???????" /><br>
<input type="button" id="modify" name="modify" value=" 変更 " onSubmit="return callServlet(this)" /> 
<input type="button" id="delete" name="delete" value=" 削除 " onSubmit="return callServlet2(this)" />
</form>

--

FormのonSubmitイベントではなく、Buttonのオンクリックイベントにしてはどうでしょうか。
submitを使うのではなくbutton属性に変えて、各Function内で
this.form.submit();
を実行してあげれば問題ないとおもいます。

---
<form method="post" id="mstSearchR" name="mstSearchR">
<input type="hidden" id="mdNoH" name="mdNoH" value="???????" /><br>
<input type="button" id="modify" name="modify" value=" 変更 " onSubmit="return callServlet(this)" /> 
<input type="button" id="delete"...続きを読む

Q複数のフォームを一括で送信することは可能ですか?

それらしきキーワードで検索しても出てこないので
頓珍漢な質問をしてるかもしれませんが、ご容赦ください。
送信ボタンは同一フォーム内のデータを送信できると思うのですが
複数のフォームを1つの送信ボタンで送信することは可能でしょうか?
例えば、下の2つのフォームを1つの送信ボタンでデータ送信することは可能でしょうか?2つのフォームを1つに合わせるというのは
なしでお願いいたします。


<form name="nform" method="POST" action="mailto:webmaster@a.com?subject=問い合せ" enctype="text/plain">
<p>お名前 :<input type="text" name="name" size="40"></p>
<p>
メッセージ:
<br>
<textarea cols="50" rows="5" name="message"></textarea>
</p>
<p><input type="submit" value="送信する"></p>
</form>
<form name="nform2" method="POST" action="mailto:webmaster@leposystems.com?subject=問い合せ" enctype="text/plain">
<p>お名前 :<input type="text" name="name" size="40"></p>
<p>
メッセージ:
<br>
<textarea cols="50" rows="5" name="message"></textarea>
</p>
<p><input type="submit" value="送信する"></p>
</form>

それらしきキーワードで検索しても出てこないので
頓珍漢な質問をしてるかもしれませんが、ご容赦ください。
送信ボタンは同一フォーム内のデータを送信できると思うのですが
複数のフォームを1つの送信ボタンで送信することは可能でしょうか?
例えば、下の2つのフォームを1つの送信ボタンでデータ送信することは可能でしょうか?2つのフォームを1つに合わせるというのは
なしでお願いいたします。


<form name="nform" method="POST" action="mailto:webmaster@a.com?subject=問い合せ" enctype="...続きを読む

Aベストアンサー

こんにちは

javascriptを使えばできるとは思いますがoffにしている状態では使えませんし、mailtoに対して試したことは無いのでどうなのかな?

<script language="javascript"><!--
function send() {
document.nform.submit();
document.nform2.submit();
}
//--></script>

<form name="nform" method="POST" action="mailto:webmaster@a.com?subject=問い合せ" enctype="text/plain">
<p>お名前 :<input type="text" name="name" size="40"></p>
<p>
メッセージ:
<br>
<textarea cols="50" rows="5" name="message"></textarea>
</p>
</form>

<form name="nform2" method="POST" action="mailto:webmaster@leposystems.com?subject=問い合せ" enctype="text/plain">
<p>お名前 :<input type="text" name="name" size="40"></p>
<p>
メッセージ:
<br>
<textarea cols="50" rows="5" name="message"></textarea>
</p>
</form>


<input type="button" value="送信" onClick="send()">

こんにちは

javascriptを使えばできるとは思いますがoffにしている状態では使えませんし、mailtoに対して試したことは無いのでどうなのかな?

<script language="javascript"><!--
function send() {
document.nform.submit();
document.nform2.submit();
}
//--></script>

<form name="nform" method="POST" action="mailto:webmaster@a.com?subject=問い合せ" enctype="text/plain">
<p>お名前 :<input type="text" name="name" size="40"></p>
<p>
メッセージ:
<br>
<textarea cols=...続きを読む

Qフォームで同じ複数のnameで違うvalueの送信

始めまして、現在一個のフォーム内で複数の同じnameで、違うvalueを送信しようと苦戦しております、、普通にタグを書くだけでは
一個のnameで違うvalueの送信は、最後のvalueしか送信できないです、
phpは使用できません。javaは、、殆ど素人なので、あまり分かりません、、formを一個一個区切るのも、レイアウト上できません、、
どうすればいいのでしょうか?・・・以下タグです。
昨日から、ここから先に進めません。。
先輩方助けてください、本当によろしくお願いします。

<form action="http://hoge.net/hoge/hogecheck.php" method="post">
<input type="hidden" name="site" value="hoge">
<input name="id" type="text" id="idform" maxlength="10" />

<input type="hidden" name="kin" value="3000">
<input type="image" src="buybtn.gif" />
<input type="hidden" name="kin" value="5000">
<input type="image" src="buybtn.gif" />
<input type="hidden" name="kin" value="10000">
<input type="image" src="buybtn.gif" />
<input type="hidden" name="kin" value="20000">
<input type="image" src="buybtn.gif" />

</form>

始めまして、現在一個のフォーム内で複数の同じnameで、違うvalueを送信しようと苦戦しております、、普通にタグを書くだけでは
一個のnameで違うvalueの送信は、最後のvalueしか送信できないです、
phpは使用できません。javaは、、殆ど素人なので、あまり分かりません、、formを一個一個区切るのも、レイアウト上できません、、
どうすればいいのでしょうか?・・・以下タグです。
昨日から、ここから先に進めません。。
先輩方助けてください、本当によろしくお願いします。

<form action="http://hoge...続きを読む

Aベストアンサー

No.2の回答者です。
スミマセンm(__)m、Javaでしたね。PHPで書いてしまいました。。。

Java だったらこれで取れます。(HTML側の修正は不要です。)
String[] kin= req.getParameterValues("kin");

Qonclickで2個指定するには?

例えば、下記のような二つの指定があるします。

function checkd1(){
document.FORM.CHECK1.checked=true
}
function checkd2(){
document.write("テスト");
}

これをonclickで二つとも指定するということはできるのでしょうか?

<a href="#" onclick="checkd1()">ボタン</a>
<a href="#" onclick="checkd2()">ボタン2</a>

を<a href="#" onclick="checkd1(),checkd2()">ボタン</a>としても動いてくれないので、書き直すのではなく、このまま二つを指定したいのですが、どうすればよいのでしょうか?

Aベストアンサー

><a href="#" onclick="checkd1(),checkd2()">ボタン</a>

<a href="#" onclick="checkd1();checkd2()">ボタン</a>

おしいですね。
, ではなく ; なら両方の関数が呼ばれると思います。
(Firefox3とIE6で確認しました。)

なぜ ; かと言うと、
Javascriptの文法で、文の区切りは ; だからですね。

Q同一ページの複数フォームを一括送信したい

会社にてあるイベントの申込みページを作成している、ほぼ初心者です。
ショッピングカートへとフォームから飛ばしたいのですが、プログラムがよくわからず行き詰っています。
以前の回答にもあったhttp://oshiete.goo.ne.jp/qa/3418439.htmlを真似て作ってみましたが、
最初のものだけをピックアップして実行されてしまいます
また、本来はチェックボックスにチェックが入っているもののみを送信したいんです

</style>
<script language="javascript"><!--
function send() {
document.a11.submit();
document.b11.submit();




}
//--></script>

これをヘッダー内に書き込み
<form name="a11" action="/products/detail.php" method="post" target="_blank">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="137" />
<input type="hidden" name="product_class_id" value="634" />
<input type="checkbox" name="quantity" value="1" /><br />
</form>

<form name="b11" action="/products/detail.php" method="post" target="_blank">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="140" />
<input type="hidden" name="product_class_id" value="637" />
<input type="checkbox" name="quantity" value="1" /><br />
</form>







というフォームが数十個あります。
数十個あるうちのチェックボックスにチェックが入っているもののみを
送信したいのですが、プログラムの組み方をご教授願えませんでしょうか?

順番としては

(1)チェックボックスにチェックが入っているものを認識
(2)チェックボックスにチェックが入っているものを順に送信

という感じなのかなと考えていろいろ調べてみたのですが、
わからない状態です

ほぼ初心者なので、お手数ですが、サンプル記述などもいただけると
大変たすかります

どうぞよろしくお願いいたします

会社にてあるイベントの申込みページを作成している、ほぼ初心者です。
ショッピングカートへとフォームから飛ばしたいのですが、プログラムがよくわからず行き詰っています。
以前の回答にもあったhttp://oshiete.goo.ne.jp/qa/3418439.htmlを真似て作ってみましたが、
最初のものだけをピックアップして実行されてしまいます
また、本来はチェックボックスにチェックが入っているもののみを送信したいんです

</style>
<script language="javascript"><!--
function send() {
document.a11.submit();
document.b...続きを読む

Aベストアンサー

>どうやってnameの中に書かれているものを読み取らせるのかすらわかっていないんです。。。
 それは、フォームを別々に分けたって同じ事です。

このあたりになるとPHPよりPerlを使ったCGIのほうが資料も多いでしょう。

 フォームのデータは、[name]=[value]のペアで送られてきます、通常はハッシュ(連想配列)に入れますが、そうすると同名のものがあれば上書きされてしまいます。
 そのため、ハッシュのハッシュなど二次元三次元のデータを作らなければなりません。
 このあたりは、Perlのマニュアル(らくだ本)をお読みください。
 ⇒O'Reilly Japan - プログラミングPerl 第3版 VOLUME 1( http://www.oreilly.co.jp/books/4873110963/ )
 ⇒O'Reilly Japan - プログラミングPerl 第3版 VOLUME 2( http://www.oreilly.co.jp/books/4873110971/ )
 ⇒O'Reilly Japan - Perl クイックリファレンス( http://www.oreilly.co.jp/books/4900900729/ )

>どうやってnameの中に書かれているものを読み取らせるのかすらわかっていないんです。。。
 それは、フォームを別々に分けたって同じ事です。

このあたりになるとPHPよりPerlを使ったCGIのほうが資料も多いでしょう。

 フォームのデータは、[name]=[value]のペアで送られてきます、通常はハッシュ(連想配列)に入れますが、そうすると同名のものがあれば上書きされてしまいます。
 そのため、ハッシュのハッシュなど二次元三次元のデータを作らなければなりません。
 このあたりは、Perlのマニュアル(らく...続きを読む

Qの意味を教えてください。

Javascriptを見ていると
<a href="#" onClick="new_open();return false">
なる記述がありますが、
この<a href="#"
の部分の意味を教えてください。
<a herf まではわかるのですが、この#はどのようないみなのでしょうか?

Aベストアンサー

href="#" というのは「そのページの最上部へのリンク」という意味で、スクロールした場所から一番上に戻したい場合に使います。
ちなみに、同ページ内への # 指定でのリンクでは、ページは読み込まれずスクロールするだけです。

<a href="#" onClick="new_open();return false">
というのは、そのリンクがクリックされた時に new_open という関数を実行し、他の処理はするな、という意味です。
return false というのが、A タグ本来のジャンプ動作をキャンセルさせるためのもので、これを取ってしまうとページ最上部にジャンプしてしまいます。

このスクリプトを書いた人は onClick だけが必要だったのでしょうが、href がないとリンクの下線が出ないなどの不都合があるため、やむなく # を書いたのでしょう。

JavaScriptの内容を実行したいだけなら、
<a href="javascript:new_open()">
と書けば十分なのですが、一部のブラウザではこのタイプのリンクをクリックすると、アニメーションGIFが止まってしまうなどの弊害があるため、嫌う人もいるようです。

また、JavaScriptが有効でない環境の人は、質問に書かれたリンクをクリックしてもページ最上部に戻されるだけで、開くべきページの内容を見ることができません。
なので、
<a href="ページのURL" target="_blank" onClick="new_open(); return false">
とするなどして、非JavaScript環境にも対応した方が親切です。

長文失礼しました。

href="#" というのは「そのページの最上部へのリンク」という意味で、スクロールした場所から一番上に戻したい場合に使います。
ちなみに、同ページ内への # 指定でのリンクでは、ページは読み込まれずスクロールするだけです。

<a href="#" onClick="new_open();return false">
というのは、そのリンクがクリックされた時に new_open という関数を実行し、他の処理はするな、という意味です。
return false というのが、A タグ本来のジャンプ動作をキャンセルさせるためのもので、これを取ってしまうとペー...続きを読む

Q【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit

【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit)の扱いについて

どのカテゴリで質問しようか迷いましたがこちらで・・・。

今回は画像を使用して質問します。
今回はHTML(PHP使用)に関しての質問なのですが、
図にあるように、※1をクリックすると、その次のページにA,Bの情報がPOSTで次のページに送信されるようにしています。
ここで、※2にも同じように、A,Bの情報をPOSTで次のページに送信したいのですが、
何故かPOSTで送信されないみたいなのです。
どうにかして※2も※1と同じようにPOSTを送信したいのです。

別の質問サイトで、「押されたsubmitがどれかによって処理を分岐させる」と回答が帰ってきたのですが、javascript無しのPHPだけで以上のことができるのでしょうか?

なお、HTMLのFORMタグは入れ子にしていませんし、
POST受け取り先の.phpも問題はありません。

以下、HTMLのform、input部分のソース
※1のフォームタグ内容
<form action="search.php" method="post" name ="search">
※1ボタンの内容
<input type="submit" name="searching" value="再検索">
※2のフォームタグ内容
<form action="result.php" method="post" name ="res">
※2ボタンの内容
<input type="submit" name="result" value="結果表示">

まとめとして、
押されたsubmitがどれかによって処理を分岐させる方法を、
javascriptではなく、PHPのみで実装させたいのです。
どうかよろしくお願いします。

【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit)の扱いについて

どのカテゴリで質問しようか迷いましたがこちらで・・・。

今回は画像を使用して質問します。
今回はHTML(PHP使用)に関しての質問なのですが、
図にあるように、※1をクリックすると、その次のページにA,Bの情報がPOSTで次のページに送信されるようにしています。
ここで、※2にも同じように、A,Bの情報をPOSTで次のページに送信したいのですが、
何故かPOSTで送信されないみたいなのです。
どうにかして※2も※1と同じようにPOSTを...続きを読む

Aベストアンサー

> 押されたsubmitがどれかによって処理を分岐させる方法を、

これのみであれば、要は ↓ みたいな事でしょうか?

<?
print_r($_POST);

$me = $_SERVER[PHP_SELF];

print "
<form action=$me method=post>
<input type=text name=a value='え~'>
<input type=text name=b value='びー'>
<input type=submit name=SubmitA value='再検索'>
<input type=submit name=SubmitB value='結果表示'>
</form>";

if ($_POST[SubmitA]) {
print "サーチ分岐";
//include "search.php";
} elseif ($_POST[SubmitB]) {
print "リザルト分岐";
//include "result.php";
}
?>

> 押されたsubmitがどれかによって処理を分岐させる方法を、

これのみであれば、要は ↓ みたいな事でしょうか?

<?
print_r($_POST);

$me = $_SERVER[PHP_SELF];

print "
<form action=$me method=post>
<input type=text name=a value='え~'>
<input type=text name=b value='びー'>
<input type=submit name=SubmitA value='再検索'>
<input type=submit name=SubmitB value='結果表示'>
</form>";

if ($_POST[SubmitA]) {
print "サーチ分岐";
//include "search.php";
} elseif ($_...続きを読む

QonClickで関数呼出し後に、結果に応じてsubmitを実行する方法

JavaScriptで、
function func() {
 if (a==0) {
  alert("処理しない");
  return false;
 }
 return true;
}
と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。

そして、FORMタグで
<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();">
</FORM>
と記述しています。
要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに
遷移させたいのですが、上記記述では、遷移しません・・・
onClick部分にonClick="return func(),submit();"と記述した場合、
func関数の実行結果がtrueでもfalseでも遷移してしまいます。
そこで、なんとなくonClick="return func()&&submit();"と記述してみたところ、
func関数がtrueの時のみうまく遷移するようになりました。

これは偶然そう動作しているのでしょうか、それとも上記は正しい記述方法なのでしょうか?
正しい記述方法ならいいのですが、上記以外に正式な記述方法があれば
教えていただけないでしょうか?

※TYPE="submit"にすればいいとは思うのですが、buttonで実現したいと
考えております。

JavaScriptで、
function func() {
 if (a==0) {
  alert("処理しない");
  return false;
 }
 return true;
}
と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。

そして、FORMタグで
<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();">
</FORM>
と記述しています。
要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに
遷移させたいのですが、上記記述では、遷移しませ...続きを読む

Aベストアンサー

3つのパターンをみる限り、理由は以下の通りと思います。
1.セミコロン(;)で区切った場合、
この場合、「return func();」と「submit();」とは別の文です。returnはその時点の値を戻して、それ以降の動作を打ち切ってしまいます。よって、onClickイベントはfuncメソッドの戻り値(true/false関係なく)を戻して、そこで終了、それ以降のsubmitは実行しないとなります。

2.カンマ(,)で区切った場合、
この場合、「return func(),submit();」が1つの文となります。この「,」は、左右の式を評価して、右式を結果とする演算子です。よって、funcメソッド、submitメソッド両方を評価するため、funcメソッドの戻り値に関係なく、submitされます。

3.&&で区切った場合、
論理演算子「&&」は、左右ともにtrue(0以外)の場合のみtrueとする演算子です。また、2項論理演算子は左式から評価し、左式だけで全体の結果がわかる場合、右式を評価しません。よって、funcメソッドがfalseを戻した場合、その時点でsubmitを評価しなくても演算結果は必ずfalseとなるのでそこで打ち切られ、trueを戻した場合、submitを評価しないと演算結果を得られないため、遷移したわけです。「&&」を「||(論理和)」に変更すると逆の結果得たと思います。

さて、では3の「&&」が正しいかと言われたら、文法上は正しいです。ただし、他人がみてわかるとは思えません。
そこで、以下の記述はいかがでしょう。読んでみてソースを理解できますか。


<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="func()">
</FORM>

(中略)

// funcの定義
function func() {
 if (a==0) {
  alert("処理しない");
  return ;
 }
 document.FormName.submit();
}

要は、ボタンを押されたら、funcを呼び出せ。
funcでは、aが0ならば、そこで終了しろ。
そうでなければ、documentオブジェクト内のFormNameと言う名前のオブジェクトのsubmitメソッドを呼べ。
です。

3つのパターンをみる限り、理由は以下の通りと思います。
1.セミコロン(;)で区切った場合、
この場合、「return func();」と「submit();」とは別の文です。returnはその時点の値を戻して、それ以降の動作を打ち切ってしまいます。よって、onClickイベントはfuncメソッドの戻り値(true/false関係なく)を戻して、そこで終了、それ以降のsubmitは実行しないとなります。

2.カンマ(,)で区切った場合、
この場合、「return func(),submit();」が1つの文となります。この「,」は、左右の式を評価して、右...続きを読む


人気Q&Aランキング

おすすめ情報