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で実現したいと
考えております。

このQ&Aに関連する最新のQ&A

A 回答 (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メソッドを呼べ。
です。
    • good
    • 0
この回答へのお礼

詳細な解説ありがとうございます。
3パターンそれぞれの動作理由が理解できました。

別の実現方法ですが、関数内でsubmit()を実行させてやればいいわけですね。
恥ずかしながら、思いつきませんでした・・・
本当にありがとうございました。

お礼日時:2001/04/24 12:20

>func()&&submit();


おお、この記述方は「しゃれ」てますね。
&& は左側がfalseの時は、右を評価(実行)しないので、&&がtrueの時だけsubmit()を実行するわけですね。
いいんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

実はなにも考えずに&&と記述していたのですが、
なぜ動作していたかが理解できました。
ありがとうございました。

お礼日時:2001/04/24 12:22

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

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

このQ&Aを見た人が検索しているワード

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

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

Qreturn trueとreturn falseの用途・違いは・・・?

functionやifなどで「return true」「return false」というのを見かけますが、これの違いを教えてください。あと最近

if(!obj){
return true;
}

という文を見かけました。
これがifじゃなくてfunctionなら、ブール値が返るのでtrueとfalseの違いがありますが、このifではなぜreturn trueを使っているのか分かりません。「return false」を書くと、ifやfunctionを強制的に抜ける「break」と同じ役割を果たすと聞いた事がありますが、trueは知りません。

・・・というより、ifでreturnを使う意味もよく分からなくなってきました。
if文は何も返りませんし、返したところで受け取る方法がありませんよね?
これもどういう意味なのか、教えてください。
よろしくお願いします。

Aベストアンサー

return TRUE; はその関数が正常に終了(期待した結果)することを
示し、return FALSE; は関数が失敗(期待しなかった結果)と言えば
わかりやすいでしょうか。

if文はifの後の式が、真か偽(0)かを判定しているものです。
if(!obj){ は、objが偽ならreturn true;とするという関数の仕様
になっていますね。if(obj==0)ならtrue(1)を返すという具合です。

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

Q送信ボタンをbuttonに変えてonclickでsubmitがうまくいきません

宜しく御願いします。
enterキーでの誤送信を防ごうと過去ログをみてそのとおりにフォームのsubmitをfalseで返し、送信ボタンをbuttonにかえてタイトルのようにjavascriptで送信しようとしたのですが「ページでエラーが発生しました」と画面下のステータスバー(?)に表示され、うまくいきません。どなたか御教授ください。ちなみにページはPHPで書いており、フレームを使用しております。
若しくは別の方法でenterキー入力を回避できる方法があれば教えてください。(onfocus以外で)

Aベストアンサー

#2です

しつれいしました。1点見逃してました
buttonの名前に「submit」はつかえません。
「submit1」とか適当な名前にしてみてください

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

Qonclickのfalseとtrue

<a href="#" onclick="history.back(); return false;">[戻る]</a>

<a href="#" onclick="history.back(); return true;">[戻る]</a>
の違いを教えてください。

Aベストアンサー

return falseの方は、リンク「#」を無視するけれど、
retrun trueの方では、リンク「#」が実行されるのでページが移動しません。

実際にやってみると分かると思いますけど?

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

Qsubmitではなくbuttonで送信

事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。

<form action="test.cgi" method="post">
<INPUT type="hidden" name="aaa" value="1234">
<INPUT type="submit" name="bbb" value="4567">
</form>



<form action="test.cgi" method="post">
<INPUT type="hidden" name="aaa" value="1234">
<INPUT type="button" name="bbb" value="4567" onclick="submit();" >
</form>


submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか?

宜しくお願いします。

Aベストアンサー

多少場当たり的ですが、こんな感じ?

<script>
function s(obj){
obj.form.elements['bbb'].value=obj.value;
obj.form.submit();
}
</script>

<form>
<INPUT type="hidden" name="aaa" value="1234">
<INPUT type="hidden" name="bbb" value="">
<INPUT type="button" value="4567" onclick="s(this)" >
<INPUT type="button" value="8901" onclick="s(this)" >
<INPUT type="button" value="2345" onclick="s(this)" >
</form>

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

Q結果がfalseでもsubmitしている?

チェックボックスにチェックが入ったら
テキストエリアに入力ができて、その入力チェックをする
というスクリプトを書いていたのですが、
一番目のチェックボックスにチェックが入ったら
入力可能というところは出来るのですが
入力チェックで結果がfalseになっているのに
submitされてしまいます。
どこか間違っているのでしょうか。



<html>
<SCRIPT language="javascript">
<!--
function Yuukou(){
if(document.DOWN.A_CK.checked == true)
{
document.DOWN.A_SEL.disabled = false;
}
else{
document.DOWN.A_SEL.disabled = true;
}
}

function check(){
if(document.DOWN.A_CK.checked == true)
{
if(document.DOWN.A_SEL.value =="")
{
alert("シリアル番号を入力してください")
return false;
}
(略)
}
}

//-->

</SCRIPT>
<FORM name="DOWN" action="A.cgi" onSubmit="check()" method="POST">
<INPUT type="checkbox" name="A_CK" id="A_CK" onClick="Yuukou()">
<INPUT size="20" type="text" disabled="disabled" name="A_SEL">
<input type="submit">
</form>
</html>

チェックボックスにチェックが入ったら
テキストエリアに入力ができて、その入力チェックをする
というスクリプトを書いていたのですが、
一番目のチェックボックスにチェックが入ったら
入力可能というところは出来るのですが
入力チェックで結果がfalseになっているのに
submitされてしまいます。
どこか間違っているのでしょうか。



<html>
<SCRIPT language="javascript">
<!--
function Yuukou(){
if(document.DOWN.A_CK.checked == true)
{
document.DOWN.A_SEL.disabled = false;
}...続きを読む

Aベストアンサー

FORMの送信動作を制御するには、onSubmitのところで真偽値を返さなければなりません。
上記スクリプトのonSubmitでは関数checkを呼び出すだけで、返される真偽値を戻す処理をしていないため、常に送信されてしまうのです。

関数checkの結果で送信を制御する時は、onSubmit="return check()" とします。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報