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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
onClickとsubmitの処理順序
JavaScript
-
return trueとreturn falseの用途・違いは・・・?
JavaScript
-
function の return 値を表示したいのですが・・
JavaScript
-
-
4
フォーム上で押されたボタンによってサーブレットの処理を変えたい
Java
-
5
confirmのOK・キャンセルを押した後の操作制御
JavaScript
-
6
onClickに複数の関数を挿入する方法
JavaScript
-
7
final修飾子を使っているのに、なぜエラーが出るのでしょうか?
Java
-
8
onclickが動作しない
JavaScript
-
9
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
10
<a href=#" …>の意味を教えてください。"
HTML・CSS
-
11
getElementsByNameで要素が取得できない
JavaScript
-
12
SELECT 文 GROUP での1件目を取得
SQL Server
-
13
ServletからServletへの値渡し
Java
-
14
一つのリンクに複数のURLを指定
HTML・CSS
-
15
webアプリを作ってます。エラーがあります。
Java
-
16
Javascript_submit()完了後に処理したい
JavaScript
-
17
HTMLの値の渡し方について質問です。 HTMLで値を今の画面から次の画面に渡すにはどういう文を使う
HTML・CSS
-
18
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
19
JSPで<SELECT>の中にDBから持ってきたデータを反映させたい
Java
-
20
JSPの処理の途中で、JavaScriptの処理をしたい
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
final修飾子を使っているのに、...
-
Refreshメソッドの使い方
-
onClickで関数呼出し後に、結果...
-
エクセルVBAにおけるON TIMEメ...
-
マスターページからコンテンツ...
-
C# 演算 最大値 最小値 表現の仕方
-
(String args[])というメッソ...
-
boolean型のフィールドとゲッタ...
-
エクリプス アウトラインビュ...
-
『増加する』メソッド名は?
-
staticメソッドの長所短所
-
eclipse-Tomcatでのデバッグに...
-
drawStringで文字間隔の調整
-
javascriptからjavaを呼び出したい
-
コマンドプロンプト実行後に画...
-
DataGridViewでセルクリックイ...
-
「CA2202: オブジェクトを複数...
-
エクセルのマクロでプリンタを...
-
Excel VBA シェイプの原型のサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
エクセルVBAにおけるON TIMEメ...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
ExcelのxlDialogInsertPictureで。
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
VBPをダブルクリックするとたま...
-
Excel VBA でExcelを終了したい...
-
Refreshメソッドの使い方
-
ウィンドウを最前面にできません
-
javascriptからjavaを呼び出したい
-
VB.netで、シリアル通信のタイ...
-
mainメソッドのthrows節で設定...
-
VBAでSaveAs使用し、指定してい...
-
PDFファイルから別ウィンドウで...
-
Application.Wait の参照設定
おすすめ情報