• ベストアンサー

テキストエリア(複数行)からの数を計算したい。

テキストエリア(複数行)からの数を計算したい。 テキストエリア(複数行)から 1100 200 300 など複数の数値が送られてきます。 それを var a = document.input.prices.value; //alert(a); var resArray = a.split(\n); var goukei =0; for(i=0;i<resArray.length;i++){ goukei = goukei + resArray[i]; } こんな風にして合計したいのですが、うまくできません。 どうすればよいのでしょうか。 よろしくお願いいたします。m(_ _)m

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いくつか引っかかっているポイントがありそうですが こんな感じでどうでしょう? <script> function view(){ var a = document.getElementById("hoge").value; var resArray = a.split(/\r\n|\n/); var goukei =0; for(i=0;i<resArray.length;i++){ if(resArray[i].match(/^[0-9]+$/)) goukei = goukei + parseInt(resArray[i]); } alert(goukei) } </script> <form method="get"> <textarea id="hoge" name="hoge"> 1100 200 300 </textarea> <input type="button" value="check" onclick="view()"> </form>

関連するQ&A

  • 追加したテキストボックスとテキストエリアの数の制御

    下記のようにテキストボックスとテキストエリアの数をボタンを押すことによって増やしていきます。 で、テキストボックスとテキストエリアは最大10個までとしたいのですが、どのようにしたらいいでしょうか? あとテキストエリアを追加していくとテキストエリアとテキストエリアの間が詰まってしまいます。間を空ける方法はないでしょうか? <script type="text/javascript"> function myAdd(){ var oTR=document.createElement("tr"); var c=count("mat"); var names=["mat","qua"]; for(var i in names){ var oTD = document.createElement("td"); var oTag = document.createElement("input"); oTag.setAttribute("type", "text"); oTag.setAttribute("name", names[i] + (c+1).toString()); oTD.appendChild(oTag); oTR.appendChild(oTD); } document.getElementById("t0").getElementsByTagName("tbody")[0].appendChild(oTR); } function count(name){ var tags=document.getElementsByTagName("input"); var c=0; var reg=RegExp("^"+name+"[0-9]+$"); for(var i=0;i<tags.length;i++){ if(tags[i].name.match(reg)){ c++; } } return c; } var tag_num = 4; function myTextAreaAdd(){ var oTag = document.createElement("textarea"); oTag.setAttribute("name", "foo" + tag_num++); var oDiv = document.getElementById("area"); oDiv.appendChild(oTag); } </script> </head> <body><form method="post" enctype="multipart/form-data" action="check.php"> <table id="t0" border> <tbody> <tr><td><input type="text" name="mat1" value=""></td> <td><input type="text" name="qua1" value=""></td> </tr> <tr><td><input type="text" name="mat2" value=""></td> <td><input type="text" name="qua2" value=""></td> </tr> <tr><td><input type="text" name="mat3" value=""></td> <td><input type="text" name="qua3" value=""></td> </tr> <tr><td><input type="text" name="mat4" value=""></td> <td><input type="text" name="qua4" value=""></td> </tr> </tbody> </table> <input type="button" value="追加する" onClick="myAdd()"> <br /> <span id="area"> <textarea name="foo1"></textarea> <textarea name="foo2"></textarea> <textarea name="foo3"></textarea> <textarea name="foo4"></textarea> </span><br /> <input type="button" value="追加する" onClick="myTextAreaAdd()"><br /> </form>

  • テキストエリアの選択行番号を返す関数

    下記のようなJavaScriptで、削除ボタンが押されたときにテキストエリアの何行目が 選択されているかを返す関数を作成途中なのですが、残りの部分がわかりません。 どうすれば、実現できるのか教えていただけないでしょうか。 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ホームバンキング</title> <script language="javascript"> <!-- document.form1.display.focus(); // テキストエリアにまずフォーカスを与える function select_row(){ // テキストエリアの何行目がクリックされているかを返す関数 var textarea = document.getElementById('display'); // テキストエリアのHTMLエンティティを取得 for(var i=0; i<textarea.length; i++){ if() break; // テキストエリアのi行目が選択されていたら、 } //document.form1.display.select(); // テキストエリアを選択状態にする return i; } //--> </script> </head>

  • テキストエリア内で改行するには。

    次のスクリプトを実行すると、テキストエリア内に 01234560 と数字が表示されますが、これを 0 1 2 . というように改行も含めてテキストエリアに出力するにはどうすればよいでしょうか。 ¥nという文字を使用するのでしょうか? <html> <head> <script language="JavaScript"> <!-- var textA="" function my1() {for (i=0;i<11;i++){textA=textA+new String(i)} document.form1.text1.value=textA;} //--> </script> </head> <body> <form name="form1"> <textarea name="text1" size="10"></textarea> <input type="button" value="CLICK!" onClick="my1();"> </form> </body> </html>

  • 複数選択ができません

    multipleの練習をしていて、以下のように超簡易買い物オーダーフォームを作ったんですけど、単品での値段は出てくるのですが、複数選択をしたときに合計した金額が出てきません。アドバイスお願いします☆ <html> <head> <SCRIPT LANGUAGE ="JavaScript"> function keisan(){ var sum; for (i=0;i<document.aaa.erabu.options.length;i++){ if(document.aaa.erabu.options[i].selected){ sum=document.aaa.erabu.options[i].value; } document.aaa.goukei.value=sum*document.aaa.kazu.value; } }</SCRIPT> </head> <body> <h2>注文表</h2> お好きな品をクリックしてください。複数品目を選択する際には、 Ctrlを押しながらクリックしてください。 <form name="aaa"> <select name="erabu"size="4"multiple> <option selected value="65">ハンバーガー <option value="80">チーズバーガー <option value="150">ポテト   <option value="100">ジュース </select> を<input name="kazu" value="1">セット<br> 注文の内容が決まりましたら[合計」ボタンを押してください。<br> <input type="button" value="合計" onclick="keisan()"><input name="goukei">円 </form> </body> </html>

  • javascript getelementsbytagnameについてです。

    var keisan=document.getElementsByTagName('input'); for(i=0;i<=keisan.length;i++){ if(keisan[i].getAttribute('value').match('Click')){ keisan[i].onclick=add(); } } function add() { var a = document.getElementById('number1').value; var b = document.getElementById('number2').value; var c = a - -b; alert(c); } 上のプログラムを入れると、"keisan[i]はnullです"といったエラーがでます。 kaisan.length=0になっているみたいです…。 xhtmlだと作動するのですが、htmlだと作動しません。 対応してないのでしょうか? 宜しくお願いいたします。

  • 複数行テキストエリアについて

    複数行テキストエリアのデータを CGIで文字数・エラー文字などをチェックし、 その結果によって、テキストエリアを編集可能にしたり、編集不可能にしたりしたいのですが、その方法がイマイチ分かりません。 cgiはperlで作っており、 $txt 加工したテキストデータ $flg 判定フラグ(0:OK 0以外:NG) として if($flg != 0){  加工したテキストを表示し、編集可能状態のテキストエリアのHTMLタグ }else{  加工したテキストを表示し、編集不可能状態のテキストエリアのHTMLタグ } というようにしたいのですが、どのようにテキストエリアに加工したテキストデータを渡せばよいのかが分からず困っています。 すみませんが教えて下さい。

    • ベストアンサー
    • Perl
  • javascriptでselectボックスの<OPTION>要素数の取

    javascriptでselectボックスの<OPTION>要素数の取得する方法について疑問があります。 データが1件の場合、複数件の場合とで分けて、 <OPTION>要素数を取得する処理を記述していますが、 データが1件の場合、 document.getElementsByName("sel").length で正しい値が取得できません。 詳しくは下記のソースを参照していただきたいのですが、 (1)、(2)、(4)は、正しい値'5'ですが、 (3)だけ誤った値'1'になります。 これはなぜでしょうか? javascript初心者のため、初歩的な質問かもしれませんが、 教えていただけたら嬉しいです。 よろしくお願い致します。 -------------------------------------- <HTML> <HEAD> <SCRIPT language="JavaScript">   function getSelLen(){ var oForm = document.form1; var sObj; var sObj2; //チェックボックスの数でデータが複数件か1件か判別しています。 if(oForm.chk.length){ //データが複数件の場合 for ( var i = 0; i < oForm.chk.length; i++ ) { sObj=document.getElementsByName("sel")[i]; alert("(1) "+ sObj.length); //・・・・(1) 正 sObj2=oForm.elements["sel"][i]; alert("(2) "+ sObj2.length); //・・・・(2) 正 } }else{ //データが1件の場合 sObj=document.getElementsByName("sel"); alert("(3) "+ sObj.length); //・・・・(3) 誤 sObj2=oForm.elements["sel"]; alert("(4) "+ sObj2.length); //・・・・(4) 正 } } </SCRIPT> </HEAD> <BODY> <FORM name="form1"> <TABLE> <TR> <TD> <INPUT type="checkbox" name="chk" > </TD> <TD> <SELECT name="sel" > <OPTION value="" selected> <OPTION value="00">00 <OPTION value="01">01 <OPTION value="02">02 <OPTION value="03">03 </TD> </TR> <!-- 複数件の場合 以下のコメントアウトを解除する --> <!-- <TR> <TD> <INPUT type="checkbox" name="chk" > </TD> <TD> <SELECT name="sel" > <OPTION value="" selected> <OPTION value="00">00 <OPTION value="01">01 <OPTION value="02">02 <OPTION value="03">03 </TD> </TR> --> </TABLE> </FORM> <FORM name="form2"> <INPUT type="button" onClick="getSelLen()" value=" selectの要素数 "> </FORM> </BODY> </HTML>

  • あらかじめ入力されたテキストエリア内のバイト数表示

    以下のようなスクリプトで、テキストエリアに入力された文字のバイト数をカウントしているのですが、 あらかじめテキストエリアに文字が入力されてる場合に「0文字」と表示されます。 ページを開いたとき、あらかじめテキストエリアに文字が入力されてる場合に、そのバイト数を 表示させる方法はあるでしょうか。 もし、おわかりになる方がおられましたら、ご教示いただければ幸いです。 function ShowLength( str ) { len = 0; for(i=0;i<str.length;i++) { var c = str.charCodeAt(i); if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)){ len += 1; } else { len += 2; } } document.getElementById("inputlength").innerHTML = len + "文字"; } <textarea onkeyup="ShowLength(this.value);"></textarea> ちなみに、onload="ShowLength(this.value);"では上手くいきませんでした。 宜しくお願い申し上げます。

  • 複数行を独立してテキストエリアに表示させたい

    皆さんの回答にはいつもお世話になっている、javascript初心者です。 普段はネット上から必要なソースをコピー・改変して利用していますが、 今回はその内容を拡張する必要があったため、その方法が分からず質問させて頂きます。 まず、以下のソースを作成しました。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis" /> <script> function update(form) { form.hoge4.value = form.hoge0.value + '\ '; if(form.hoge1[0].checked) { form.hoge4.value += form.hoge1[0].value + '\ '; } else if (form.hoge1[1].checked) { form.hoge4.value += form.hoge1[1].value + '\ '; } else if (form.hoge1[2].checked) { form.hoge4.value += form.hoge1[2].value + '\ '; } else if (form.hoge1[3].checked) { form.hoge4.value += form.hoge1[3].value + '\ '; } if(form.hoge2[0].checked) { form.hoge4.value += form.hoge2[0].value + '\n'; } else { form.hoge4.value += form.hoge2[1].value + '\n'; } } </script> </head> <body> <form action=""> 名前:<input type="text" name="hoge0" value=""> 趣味 <input type="checkbox" name="hoge1" value="ゲーム">ゲーム <input type="checkbox" name="hoge1" value="PC">PC <input type="checkbox" name="hoge1" value="釣り">釣り <input type="checkbox" name="hoge1" value="車">車  配偶者 <input type="radio" name="hoge2" value="あり">あり <input type="radio" name="hoge2" value="なし">なし <br> <br> <textarea name="hoge4" value="" rows="5" cols="40"></textarea> <br> <button type="button" onclick="update(this.form);">内容反映</button> <input type="reset" value="リセット"> </form> </body> </html> この内容は、テキストボックスとチェックボックスとラジオボタンの組み合わせを ボタン押下で下部のテキストエリアに反映させるというものです。 現状では、 1,テキストボックスが1つ 2.チェックボックスは複数あるうち1つを選択した場合しか反映されない 3.名前~なしまでが回答項目だが、1行(1人分)しかない という内容ですが、これをテキストボックスとチェックボックスとラジオボタン の配置順は変えず、以下のように変更する事を希望しています。 1,テキストボックスが2つ 2.チェックボックスは複数あるうち単数/複数どちらを選択した場合でも全て反映される 3.名前~なしまでの回答項目を、複数行(30人分を想定しています)作成し、反映結果は 田中 ゲーム 車 あり 鈴木 ゲーム 釣り あり 伊藤 釣り 車 なし … … のようにそれぞれの項目は半角スペースを空けて、ラジオボタンの回答項目のところで 改行する、というものにする。 私は1つのまとまり(今回はテキストボックスとチェックボックスとラジオボタン)を テキストエリアに反映させる仕組みは分かったと思うのですが、この「まとまり」が 複数になったときに応用がきかず困っています。 不勉強の私ですが、皆さんのお力添えをどうぞ宜しくお願い致します。

  • index が0の1行目が計算されない

    お世話になります。 基本的な事もわかっていない超初心者です。 どうか、ご教授下さい。 以下のhtml表はphpで<?php $index = 0; while ( ループ条件 { ?> <input type="button" value="計算" onclick="keisan(<?= $index ?>)" /> <? php$index++;} ?> でできた表ですが、 以下のjavascript でkeisan ( index )が下記のように表が1行しかない場合 javascriptエラーで計算できません。 <script type="text/javascript"> function keisan ( index ) { var formObj = document.tasizan; var aa = parseInt ( formObj.aa[index].value ); var bb = parseInt ( formObj.bb[index].value ); formObj.kaito[index].value = aa + bb;} </script> <form name="tasizan"> <table> <tr><th>A</th><th>B</th><th>回答</th></tr><tr> <td><input type="text" name="aa" size="5" /></td> <td><input type="text" name="bb" size="5" /></td> <td><input type="text" name="kaito" size="10" /> <input type="button" value="計算" onclick="keisan(0)" /></td> </tr></table></form> そこで自分なりに function keisan ( index ) { if(index==0){var formObj = document.tasizan; var aa = parseInt ( formObj.aa.value ); var bb = parseInt ( formObj.bb.value ); formObj.kaito.value = aa + bb;} if(index>1){ var formObj = document.tasizan; var aa = parseInt ( formObj.aa[index].value ); var bb = parseInt ( formObj.bb[index].value ); formObj.kaito[index].value = aa + bb; };} 等、色々考えてみましたがこれでは複数行ある時の1行目が計算されません。 どうしたら複数行ある時にも1行目を計算できるようになるのでしょうか? 具体的に教えて頂けると大変助かります。 どうかご教授の程よろしくお願い致します。

専門家に質問してみよう