質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.64%

textとラジオに入力した文字を足したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 707

toutou

score 1636

テキストに数字をいれ、それをラジオで選択した数値と足して
どちらかが大きかった場合にそれ相応のアラートを出したいのですが
テキストの数値だけで判断されてラジオの数値を足してくれません。
下手にいじると今度は関数を認識してくれないということもあります。
これだと一番下のアラートとボタンのところにエラーがでます。
まったくわからないのでアドバイスをください。
始めて1ヶ月足らずです。

function sougou(){
   var saba1=document.keisei.saba.value;
   var maguro1=document.keisei.maguro.value;
   var f=document.kei.kom;
   var aaa='';

    for(var i = 0; i < f.length; i++ ){
    if(f[i].checked){          
        aaa=f[i].value;
        return aaa;}  //ここの数値がどこかにいってしまう

  if((saba1==0||maguro1==0)){
      alert("数字を入れる");
      }else if(saba1>maguro1+aaa){
      alert("あっちの勝ち");
      }else if(saba1<maguro1+aaa){
       alert("こっちの勝ち");}}  //ここでエラーが出る

 

<form name="kei">
<p>
<input type="radio"name="kom"value="5">5位<br>
<input type="radio"name="kom"value="6"checked>6位<br>
<input type="radio"name="kom"value="7">7位<br>
</p>

<p>
赤:<input type="text"name="saba"><br>
青:<input type="text"name="maguro">
<p>

<input type="button" value="計算する"onClick="sougou()">
<!--起動させたらエラーが起こる--!>
</p>
</form>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • toutou

    2016/07/26 01:15

    時間をもらいましたがなんとかできました

    キャンセル

  • kei344

    2016/07/26 01:17

    <html> など現在コードブロック外の要素は削除しても良いと思います。

    キャンセル

  • toutou

    2016/07/26 01:23

    ほかは全部削除しました

    キャンセル

回答 2

checkベストアンサー

0

まず、インデントをしっかり付けましょう。コード用のエディタなどぐぐればたくさんあるのでそれを使うと良いです。

function sougou(){
   var saba1=document.keisei.saba.value;    // ← keiseiなのかkeiなのか統一する
   var maguro1=document.keisei.maguro.value;    // ← keiseiなのかkeiなのか統一する
   var f=document.kei.kom;            // ← keiseiなのかkeiなのか統一する
   var aaa='';

    for(var i = 0; i < f.length; i++ ){
    if(f[i].checked){          
        aaa=f[i].value;
        return aaa;}  //ここの数値がどこかにいってしまう    // ← returnするとfunctionを抜けます
        // ← forの閉じ括弧「}」が無い
  if((saba1==0||maguro1==0)){    // ← 0も数字です。
      alert("数字を入れる");
      }else if(saba1>maguro1+aaa){
      alert("あっちの勝ち");
      }else if(saba1<maguro1+aaa){
       alert("こっちの勝ち");}}  //ここでエラーが出る
<form name="kei">        <!-- ← keiseiなのかkeiなのか -->
<p>
<input type="radio"name="kom"value="5">5位<br>        <!-- ← 全ての属性値の間にスペースがあるほうがいいと思う -->
<input type="radio"name="kom"value="6"checked>6位<br>
<input type="radio"name="kom"value="7">7位<br>
</p>

<p>
赤:<input type="text"name="saba"><br>
青:<input type="text"name="maguro">
<p>        <!-- ← ここは </p> でしょう -->

<input type="button" value="計算する"onClick="sougou()">
<!--起動させたらエラーが起こる--!>        <!-- ← コメントの書き方が間違っています -->
</p>        <!-- ← 不要 -->
</form>

とりあえず整形したものをリンクしておきます。
動くサンプル:https://jsfiddle.net/j8vv44es/


追記:

数値の問題を是正したバージョンも貼っておきます。

動くサンプル2:https://jsfiddle.net/j8vv44es/1/

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/26 02:23

    ご丁寧に何個もありがとうございます。こうしてみるとひどいですね。何からやっていいやらわからなくなるくらいひどいです。もう少し基礎をこつこつやっていこうかなと思います。

    キャンセル

  • 2016/07/26 04:43 編集

    いえいえ、文法上のミスはよくあることなので大丈夫です。コード用のエディタには文法チェック機能が付いているものや、入力を補助してくれるものもあるので、そういうものでカバー出来ます。

    また、エラーを探すことについても、各モダンブラウザに標準でついている「デベロッパーツール」を使うことで、発見や対処がしやすくなります。

    【Web開発でよく使う、特に使えるChromeデベロッパー・ツールの機能 - Build Insider】
    http://www.buildinsider.net/web/chromedevtools/01

    【第1回 詳説:デベロッパーツールの使い方:Google Chrome版Firebug:デベロッパーツール取扱説明書|gihyo.jp … 技術評論社】
    http://gihyo.jp/dev/feature/01/devtools/0001?page=2

    がんばってくださいねー。

    キャンセル

0

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
    function sougou(){
    var saba1=document.kei.saba.value;
    var maguro1=document.kei.maguro.value;
    var f=document.kei.kom;
    var aaa='';

    for(var i = 0; i < f.length; i++ ){
      if(f[i].checked){
        aaa=f[i].value;
        return aaa.to_i;
      }  //ここの数値がどこかにいってしまう

      if((saba1==0||maguro1==0)){
        alert("数字を入れる");
      }else if(saba1>maguro1+aaa){
        alert("あっちの勝ち");
      }else if(saba1<maguro1+aaa){
        alert("こっちの勝ち");
      }
    }  //ここでエラーが出る
  }
</script>
</head>
<body>
    <form name="kei">
<p>
<input type="radio"name="kom"value="5">5位<br>
<input type="radio"name="kom"value="6"checked>6位<br>
<input type="radio"name="kom"value="7">7位<br>
</p>

<p>
赤:<input type="text"name="saba"><br>
青:<input type="text"name="maguro">
<p>

<input type="button" value="計算する"onClick="sougou()">
</p>
</form>
</body>
</html>

こんな感じでしょうか?

問題点としては、まずsaba1・saba2の取得のところで

document.keisei.saba.value
となっていましたが、フォームの名前がkeiなので
document.kei.saba.value
だと思います。(同じようにmaguroも)

もう一つはaaaとmaguro・sabaの型の違いです
型はプログラミングをやっていたら一度は聞いたことがあると思いますが、変数の入っているものの種類を表します。
例えばaaaは文字列を入れるstring型で、saba・maguroは整数を入れるinteger型です。
基本的に型が違う物の計算はできません。なのでaaaには入っている数字は無視されたのでしょう。
そこで下のように、aaaをto_iというstring型をinteger型に変換するメソッドをつかって変換することによって計算できるようにしています。

return aaa.to_i;

ちなみにjavascriptは型をあまり意識しなくても、書けてしまう言語なので、このような誤解が始めたばっかりの時は多いですが、型は大事です。もし他の言語なら型を知らなければ、コードは書けません。以下の記事を参考にしてみてください。

データ型 - JavaScript超初心者によるJavaScript入門講座

あと、エラーがでたらその内容も質問につけておくとわかりやすいと思います。

ちょっと、やりたいことと違うかもしれません。違ったり、わからなかったらコメントください!!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/26 02:24

    データって大切だったんですね。JAVAscriptのほうだったら何とかなるって思ってたのが甘かったです。データ型を覚えようかと思います。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る