JavaScriptでの数値変換によるNaNエラー

このQ&Aのポイント
  • JavaScriptを勉強中の方がevalで数値に変換している際にNaNエラーが発生する場合の対処方法について教えてください。
  • 質問者はJavaScriptを勉強中であり、数値変換の際にNaNというエラーが表示されることに困っています。NaNは数値ではないことを示すエラーです。質問者は一人では解決できないため、助けを求めています。
  • 質問者は配列と値段の計算を行うJavaScriptコードを書いていますが、数値変換の際にNaNエラーが発生してしまいます。質問者は正しい数値変換の方法を学びたいと考えています。
回答を見る
  • ベストアンサー

evalで数値に変換してる筈なのですが・・・NaN

今、JavaScriptを勉強中なのですが… Nanと言う表示が出てしまうと言う事は数値じゃないと言う事ですよね? どうしても一人の力では脱出できませんのでお助けください! どなたか是非ご教授よろしくお願いします。 var item=["N-01ネックレス","N-02ネックレス","EA-01イヤリング","KS-01携帯ストラップ"]; var g=[10,15,20,30]; var p=[1000,800,600,600]; function n01(){ var gtotal=0; var guram=0; for(a=0;a<4;a++) { if(document.form.elements[a].checked){ document.form.elements[11+(a*3)].value=item[a]; guram=eval(document.form.elements[12+(a*3)].value=g[a]); price=eval(document.form.elements[13+(a*3)].value=p[a]); }else{ document.form.elements[11+(a*3)].value=""; guram=eval(document.form.elements[12+(a*3)].value=0); price=eval(document.form.elements[13+(a*3)].value=0); } gtotal=gtotal+guram[a]; } document.form.elements[23].value=gtotal; }

  • teiry
  • お礼率84% (48/57)

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

  • ベストアンサー
noname#199778
noname#199778
回答No.1

はじめの方で、itemとgとpという名前の配列を定義しようとしているようですが、JavaScriptで配列を作成するのであれば、 var g= new Array(10,15,20,30); のように記述するのが普通だと思います。 また、下の方で gtotal=gtotal+guram[a]; となっていますが、guram()という名前の配列は定義されているのでしょうか? このあたりに原因があるような気がしますが、いかがでしょう。 見当違いでしたら、ごめんなさい。

teiry
質問者

お礼

ありがとうございます!!! 可笑しいですよね!確かに可笑しいです!! 私配列じゃなくて変数なのに余計な所に 配列指定しちゃってたんですね! 直りました!本当に本当にありがとうございました!!

関連するQ&A

  • どうしても上手くいきません。

    <!-- function func() { var a = eval(document.price.fa.checked); var b = eval(document.price.fb.checked); var c = eval(document.price.fc.checked); var d = eval(document.price.fd.checked); var e = eval(document.price.fe.checked); var f = eval(document.price.ff.checked); var g = eval(document.price.fg.checked); var h = eval(document.price.fh.checked); var i = eval(document.price.fi.value); document.price.fprice.value = a + f +Math.round((b + c + d + e + 6500) * (50 + g)); } // --> すみません。 上の構文がどうしても上手くいきません。 計算結果が反映されません。 どこかおかしいのでしょうか。 不しつけながら宜しくお願いします。

  • JavaScriptの計算のNaNの判定について…

    いろいろなアドバイスを参考に以下のようなプログラムを作り、値が正の時はちゃんと計算されるのですが負の時はNaNと判定されてしまいます。どうしたら負の場合でもちゃんと計算されますか?いろいろ調べたのですが見つかりませんでした…。よろしくお願いします。 <html> <body> <script type="text/javascript"> var rslt1 = 0; var rslt2 = 0; var rslt3 = 0; function hoge1(){ var a=document.getElementById('a').value; var b=document.getElementById('b').value; var rslt; if (a==1 && b==1) { rslt1=-100; } else { if (a==1 && b==2) { rslt1=-90; } else { if (a==2 && b==1) { rslt1=-80; } else { rslt1=-70; }}} document.getElementById('txt1').value=rslt1; sum1(); } function hoge2(){ var a=document.getElementById('a').value; var c=document.getElementById('c').value; var rslt; if (a==1 && c==1) { rslt2=-95; } else { if (a==1 && c==2) { rslt2=-85; } else { if (a==2 && c==1) { rslt2=-75; } else { rslt2=-65; }}} document.getElementById('txt2').value=rslt2; sum1(); sum2(); } function hoge3(){ var a=document.getElementById('a').value; var d=document.getElementById('d').value; var rslt; if (a==1 && d==1) { rslt3=-60; } else { if (a==1 && d==2) { rslt3=-50; } else { if (a==2 && d==1) { rslt3=-40; } else { rslt3=-30; }}} document.getElementById('txt3').value=rslt3; sum2(); } function sum1() { document.getElementById('txt4').value=rslt1 + rslt2; } function sum2() { document.getElementById('txt5').value=rslt2 + rslt3; } function sum3() { document.getElementById('txt6').value=((document.getElementById('txt4').value + rslt2 + document.getElementById('txt5').value * 2) / 4); } </script> <select id="a" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="b" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="c" onChange="hoge2()"> <option value="1">1<option value="2">2 </select> <select id="d" onChange="hoge3()"> <option value="1">1<option value="2">2 </select><p> <input type="text" id="txt1" value=""><p> <input type="text" id="txt2" value=""><p> <input type="text" id="txt3" value=""><p> <input type="text" id="txt4" value=""><p> <input type="text" id="txt5" value=""><p> <input type="text" id="txt6" value=""><p> </body> </html>

  • evalの挙動について

    evalで特定のコントロールにフォーカスを当てれないでしょうか? asp と JavaScript を使って、ユーザが数値以外の値を入力した場合、エラーとしてそのコントロールにフォーカスを当てたいと思います。 Form の OnSubmit で以下の関数を呼び出します。 function CheckForm(){ nRoomCnt = <%=nRCnt%>; var ArrayRoomId = new Array(); <% for nCnt = 0 to nRoomCnt - 1 %> ArrayRoomId.push( <%=arrRoomId(nCnt)%> ); <% next %> for(var nCnt = 0; nCnt < nRoomCnt; nCnt++){ var s = "sCheck = document.form06.SelRoom" + ArrayRoomId[nCnt] + ".value;" ret = eval(s); //こちらは正しく評価されます。 alert(ret); if(isNaN(ret)){ s = "document.form06.SelRoom" + ArrayRoomId[nCnt] + ".SetFocus(); return false;"; ret = eval(s); // ここでエラーが発生し、次の画面に遷移してしまいます。 alert(s); alert(ret); return false; } } alert(ret); return true; どなたか詳しい方、ご教示いただけないでしょうか? よろしくお願いします。

  • ジャバスクリプトで自動計算表を作ったのですが、IEでは動くのですが、フ

    ジャバスクリプトで自動計算表を作ったのですが、IEでは動くのですが、ファイヤーフォックスでは動きません。どこに不具合があるのでしょうか? 問題のフォームはこちらです http://tatamitai.com/form1-11.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>メールフォーム</TITLE> <META http-equiv="Content-Style-Type" content="text/css"> <META name="description" content="メールフォーム"> <META name="keywords" content="メルマガ,ホームページ,サイト制作"> <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1a = 3680; var price1b = document.form1.格安コース:数.selectedIndex * 1; // 単価を設定 var price1c = document.form1.格安コース:工期等課金.value * 1; // 単価を設定 var price1d = document.form1.格安コース:柄.value * 1; // 単価を設定 var price1e = document.form1.格安コース:シート.value * 1; // 単価を設定 var price1f = document.form1.格安コース:乾燥.value * 1; // 単価を設定 var total1 = document.form1.格安コースの小計.value = (price1a + price1c + price1d + price1e + price1f) * price1b; // 小計を表示 // 商品2 var price2a = 4900; var price2b = document.form1.標準コースA:数.selectedIndex * 1; // 単価を設定 var price2c = document.form1.標準コースA:工期等課金.value * 1; // 単価を設定 var price2d = document.form1.標準コースA:柄.value * 1; // 単価を設定 var price2e = document.form1.標準コースA:シート.value * 1; // 単価を設定 var price2f = document.form1.標準コースA:乾燥.value * 1; // 単価を設定 var total2 = document.form1.標準コースAの小計.value = (price2a + price2c + price2d + price2e + price2f) * price2b; // 小計を表示 // 合計を計算 var total = total1 + total2; // 設定終了 document.form1.合計.value = total; // 合計を表示 } // --> </script> <STYLE type=text/css> <!-- A:link { FONT-SIZE: 10pt; COLOR: #ff0000; TEXT-DECORATION: none ;} A:visited { FONT-SIZE: 10pt; COLOR: #ff0000; TEXT-DECORATION: none ;} A:active { FONT-SIZE: 10pt; COLOR: #ff0000; TEXT-DECORATION: none ;} A:hover { FONT-SIZE: 10pt

  • parseIntで戻り値がNaNになるのはなぜ?

    parseIntを使って文字列型から数字だけを抜き出して数値型へ変換したいのですが、 下記のようにNaNになってしまいます。何が悪いのでしょうか。 <html lang="ja"> <head> <title></title> </head> <body> <script> var a = "100点満点" var b = parseInt('a',10); document.write('typeof a ⇒ '+typeof a+'<br>'); document.write('var b = parseInt("a",10); ⇒ '+b+'<br>'); document.write('typeof b ⇒ '+typeof b+'<br>'); </script> </body> </html> 上記の結果は、 --------------------------------- typeof a ⇒ string var b = parseInt("a"); ⇒ NaN typeof b ⇒ number ---------------------------------

  • 型変換を行った後で計算をする方法

    DBには、テキスト型で保存している数字があります。 それをJSP側でINT型に変換して、 計算を行いたいのですが、何か良い方法はありませんか? 下記のままだと常に0が表示されてしまいます。 どうか良いアドバイスをお願いします。 function changeYosan() {  var lstYosan = document.form.elements("_uriageYosan");  var lstJisseki = document.form.elements("_uriageJisseki");  var lstNobi = document.form.elements("_nobiritsu"); for(i = 0 ; lstYosan.length > i ; i ++ ){   lstNobi[i].value = lstYosan[i].value.replace(",","") /     lstJisseki[i].value * 100; if(isNaN(lstNobi[i].value)){   lstNobi[i].value = 0; } } }

  • javascriptについて

    function df(){ document.ad.ad1.value=500; } function df2(a){ var sty=a.ad2.selectedIndex; a.ad3.value=eval(a.ad1.value)*eval(a.ad2.options[sty].value); } function df3(){ var s1=document.ad.ad3.value; var s2=document.ad.ad4.value; var fv=s1+"円\n"+ s2+"様"; var don=confirm(fv); } function df4(){ var p=0; if(document.ad.ad4.value==""){ p=1; } if(p){ alert("記入漏れ"); return false; } else{ return true; } } --> </script> </head> <body> <form action="#" method="POST" name="ad"> <p>ラーメン<input type="text" soze="20" value="500" name="ad1" onChange="df()">円</p> <p><select name="ad2" onChange="df2(this.form)"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> 個 </select> </p> <p>合計<input type="text" size="20" name="ad3">円</p> <p>備考:<input type="text" size="20" name="ad4"></p> <p><button onClick="df3();df4();"><img src="rtp/migi.jpg"></button></p> </form> </body> </html> 内容に間違いがあっても データーを送ってしまいます。 何故なんでしょうか?

  • for文についてご教授ください

    javascriptを学習しています。初級者のためご教授のほどお願いします。 <!DOCTYPE html> <html lang="ja"> <head> <script> function kazu(){ var fObj = document.itemlist; var price1 = fObj.item1.options[fObj.item1.selectedIndex].value; var price2 = fObj.item2.options[fObj.item2.selectedIndex].value; var total = parseFloat(price1) + parseFloat(price2); document.getElementById("total").value = total; } </script> </head> <body> <header> <form action="#" name="itemlist" > <table> <tr> <td> <select name="item1" onchange="kazu()"> <option value="100">itemA-1</option> <option value="200">itemA-2</option> </select> </td> </tr> <td> <select name="item2" onchange="kazu()"> <option value="1000">itemB-1</option> <option value="2000">itemB-2</option> </select> </td> </tr> <tr> <td name="total"> <input type="text" value="" id="total" /> </td> </tr> </table> </form> </body> </html> 上記の内容をfor文を使い動作するようにと思っています。 自分で以下の内容を考えたのですがが動作しません。 以下の内容の問題点を教えいただければと思います。なにとぞよろしくお願いいたします。 function kazu(){ var fObj = document.itemlist; var len = document.itemlist.length; for(i=1;i<=len;i++){ var price[i] = fObj.item[i].options[fObj.item[i].selectedIndex].value; } var total = parseFloat(price1) + parseFloat(price2); document.getElementById("total").value = total; }

  • Javascript 足し算

    ホームページ用見積もりフォーム 商品の値段を合計する。 一個ずつ足しての計算で処理してるのですが、商品がかなりの数になりそうです。 エクセルのSUMのように商品1から商品1000までを計算する関数を教えていただきたいと思っています。 JavaScriptは外部参照しています。 以下がJavaScriptのコードになります。 function keisan(){ // 設定開始 var tax = 5; // 消費税率 // 商品1 var price1 = document.form1.goods1.options[document.form1.goods1.selectedIndex].value; // 商品2 var price2 = document.form1.goods2.options[document.form1.goods2.selectedIndex].value; // 商品3 var price3 = document.form1.goods3.options[document.form1.goods3.selectedIndex].value; // 合計を計算 var total1 = parseInt(price1) + parseInt(price2) + parseInt(price3); // 設定終了 document.form1.field_total1.value = editNumberSeparated(total1); // 合計を表示 var tax2 = Math.round((total1 * tax) / 100); document.form1.field_tax.value = editNumberSeparated(tax2); // 消費税を表示 document.form1.field_total2.value = editNumberSeparated(total1 + tax2); // 税込合計を表示

  • HTMLのinputタグ数が変わる場合のjavascript処理

    パターンA ~HTML~ <input type='text' name='a[]'> <input type='text' name='a[]'> ~JavaScript~ var n = document.form1.elements["a"][0].value ; var n = document.form1.elements["a"][1].value ; パターンB ~HTML~ <input type='text' name='a[]'> ~JavaScript~ var n = document.form1.elements["a"][0].value ; ---(1) パターンAではエラーが出ないのですが、パターンBでは(1)のところでエラーになってしまいます。 【elements["a"][0]】の部分を【elements["a"]】とすればエラーは出ません。 どうやら、inputタグが1つしかない場合は、Javascriptでは配列として認識しないようです。 できれば、inputタグが1つの場合でも複数の場合でも、同じJavascriptコードを使いたいのですが、何か良い方法はありますか?

専門家に質問してみよう