![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で実現したいと
考えております。
No.2ベストアンサー
- 回答日時:
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パターンそれぞれの動作理由が理解できました。
別の実現方法ですが、関数内でsubmit()を実行させてやればいいわけですね。
恥ずかしながら、思いつきませんでした・・・
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
onClickとsubmitの処理順序
JavaScript
-
return trueとreturn falseの用途・違いは・・・?
JavaScript
-
<a href=#" …>の意味を教えてください。"
HTML・CSS
-
-
4
confirmのOK・キャンセルを押した後の操作制御
JavaScript
-
5
onclickが動作しない
JavaScript
-
6
onClickに複数の関数を挿入する方法
JavaScript
-
7
function の return 値を表示したいのですが・・
JavaScript
-
8
getElementsByNameで要素が取得できない
JavaScript
-
9
テーブルの位置を細かく指定したい。
HTML・CSS
-
10
final修飾子を使っているのに、なぜエラーが出るのでしょうか?
Java
-
11
Javascript_submit()完了後に処理したい
JavaScript
-
12
javaで質問です。 文字列2023/2/3(一桁の場合、0埋めなし)の場合にyyyyMMddに変換
Java
-
13
エクセルである行以下全部を削除する方法
Excel(エクセル)
-
14
フォーム上で押されたボタンによってサーブレットの処理を変えたい
Java
-
15
hiddenのvalueの値を変えたい
JavaScript
-
16
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
17
form action=#""
HTML・CSS
-
18
JSPやサーブレットでSystem.out.println()などでコンソールに出力できますでしょうか?
Java
-
19
確認ダイアログの出し方(JavaScript/struts)
JavaScript
-
20
条件により、リンク先に画面遷移しないようにする方法
JavaScript
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
JSPで<SELECT>の中にDBから持っ...
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
C++/CLIにてForm1の要素に外部から
-
DataGridViewでセルクリックイ...
-
javascriptからjavaを呼び出したい
-
配列のメソッド
-
JAVA コンパイル時のエラー
-
Excel VBA でExcelを終了したい...
-
ODBCでMoveNextがうまく動作し...
-
final修飾子を使っているのに、...
-
コンパイルエラーの理由。
-
ウィンドウを最前面にできません
-
VBA コピーが出来ません…!
-
PDFファイルから別ウィンドウで...
-
IDispatch と dispinterface の...
-
HyperLinkのNavigateUrl属性に...
-
エクセルのマクロでプリンタを...
-
mainメソッドのthrows節で設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
Labelコントロールに数字を代入...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
JSPで<SELECT>の中にDBから持っ...
-
コマンドプロンプト実行後に画...
-
Refreshメソッドの使い方
-
エクセルVBAにおけるON TIMEメ...
-
boolean型のフィールドとゲッタ...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
配列のメソッド
-
【sendkeysメソッドが動かずに...
-
Excel VBA でExcelを終了したい...
-
VB.netで、シリアル通信のタイ...
-
worksheets & rows メソッドは...
-
Application.Wait の参照設定
-
(String args[])というメッソ...
おすすめ情報