みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

数値以外はテキストボックスにエラーを出したい。

過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。

document.d1.s3.valueのテキストボックスに「100以上300以内、以外の値」は"値が不正です"と出して処理を中断したいのですが、実行しても通りすぎてif分岐の処理が行われませんでした。

ちなみに以下が問題のソースです。

<html>
<head>
<title>電卓</title>
<SCRIPT language="JavaScript">
<!--

function keisan2(){

if(document.d1.s1.value==""){
document.d1.s3.value=("(1)が空です")
return false;
}

var lop = document.d1.s1.value;
var evi = isNaN(lop);
if(evi==true){
document.d1.s3.value=("(1)が数値ではありません")
return false;
}

var aop = document.d1.s2.value;
var dai = isNaN(aop);
if(dai==true){
document.d1.s3.value=("(2)が数値ではありません")
return false;
}

if(document.d1.s2.value==""){
document.d1.s3.value=("(2)が空です")
return false;
}

var poy = document.d1.s1.value; //質問のところはここからです
if(!poy >= 100){
document.d1.s3.value=("値が不正です");
}
else if(!poy <= 300){
document.d1.s3.value=("値が不正です");
return false;
}



document.d1.s3.value=parseInt(document.d1.s1.value)*parseInt(document.d1.s2.value);

document.d1.s3.value="答えは"+document.d1.s3.value+"です"




}

function k1(frm){




so=window.open(frm);




}



//-->
</SCRIPT>

</head>
<body>
<center>

<table border="1" width="400" height="300">
<tr>
<td width="250" height="200">
<center>
<table border="1" width="200" height="150"><tr><td>&nbsp;</td></tr></table>
<form name="d1">
</center>
</td>
<td width="150" height="200">(1)
<input type="text" name="s1">
</td>
</tr>
<tr>
<td width="400" height="50" colspan="2">(2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="s2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<input type="button" name="poi" value="&nbsp;&nbsp;=&nbsp;&nbsp;" onClick="keisan2(this)"></td>

</tr>
<tr>
<td colspan="2" width="400" height="50">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
答え<input type="text" name="s3" size="30"></td>
</tr>
</form>
<table>
<br><br>
<form>
<input type="button" name="us" value="&nbsp;&nbsp;&nbsp;実行&nbsp;&nbsp;&nbsp;" onClick=' k1("kara5.htm")' >
</form>

</center>
</body>
</html>

どうかお分かりになる方ご教授お願いします。

投稿日時 - 2007-05-28 11:08:03

QNo.3036920

すぐに回答ほしいです

質問者が選んだベストアンサー

演算子の優先順位の問題ですね。
「!」は「==」より順位が上ですので#1さんの言うようにカッコが
必要になります。

実際問題ソースに無駄が多いし、引数の引渡しもいい加減のようなので、
以下のようにまとめてみてはいかがですか?


<SCRIPT language="JavaScript">
function keisan2(f){
var lop = f.s1.value;
var evi = isNaN(lop);
var aop = f.s2.value;
var dai = isNaN(aop);
var ans = "";

if(lop==""){
ans="(1)が空です";
return false;
}

if(evi==true){
ans="(1)が数値ではありません";
return false;
}

if(aop==""){
ans="(2)が空です";
return false;
}

if(dai==true){
ans="(2)が数値ではありません";
return false;
}

if(lop < 100 || lop > 300){
ans="値が不正です";
return false;
}
ans="答えは"+(parseInt(lop)*parseInt(aop))+"です";
f.s3.value=ans;
}

トリガーになるボタン↓↓↓
<input type="button" name="poi" value="&nbsp;&nbsp;=&nbsp;&nbsp;" onClick="keisan2(this.form)">

投稿日時 - 2007-05-28 11:33:49

お礼

大変勉強になります。私はJavaScriptを学び始めてそろそろ1ヶ月くらいになるのですが、意図した動きをさせるので満足していました。
これからはソースをきれいに書く(誰が見ても理解しやすい)事にも気をつけて書いていこうと思います。
本当にありがとうございました。

投稿日時 - 2007-05-28 11:54:56

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

検証はしていませんが単純に
var poy = document.d1.s1.value; //質問のところはここからです
if(poy < 100){
document.d1.s3.value=("値が不正です");
}
else if(poy > 300){
document.d1.s3.value=("値が不正です");
return false;
}
では、だめなんですか?
また、「!」を使うなら、
var poy = document.d1.s1.value; //質問のところはここからです
if(!(poy >= 100)){
document.d1.s3.value=("値が不正です");
}
else if(!(poy <= 300)){
document.d1.s3.value=("値が不正です");
return false;
}
の様に「()」で囲わないと先に「!」が評価されると思いますが…。

投稿日時 - 2007-05-28 11:12:55

お礼

ありがとうございました。正常に動きました。
演算子の優先順位というものがまったく頭にありませんでした。

投稿日時 - 2007-05-28 11:50:28

あなたにオススメの質問