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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

777閲覧

JavaScriptの条件分岐の判定がある値でおかしい。

helloinf

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/04 08:38

編集2020/05/04 09:58

前提・実現したいこと

JavaScriptで計算システムを作っています。
ある機能の条件分岐を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

1.Web上で hs[i+1]["position"]に10 full_lengthに10 を入力すると、console上では a>b -> false a<b -> false a===b -> true となります。ここは問題ないです。 2.Web上で hs[i+1]["position"]に11 full_lengthに10 を入力すると、console上では a>b -> true a<b -> false a===b -> false となります。ここも問題ないです。 3.Web上で hs[i+1]["position"]に9 full_lengthに10 を入力すると、console上では a>b -> true a<b -> false a===b -> false となり、判定がおかしいです。 また、hs[i+1]["position"]に1以下の値を入力すると正しく判定されます。

該当のソースコード

HTML

1 <div class="lng__table"> 2 <div class="tab"><!-- btn --> 3 <div class="general_btn tab_btn"><img src="./common/img/general.jpg"></div> 4 <div class="hinge_support_btn tab_btn"><img src="./common/img/hinge_support.jpg"></div> 5 <div class="start" id="proStart"></div> 6 </div> 7 <div class="data"> 8 <div class="general date_cont"> 9 <h3></h3> 10 <div class="number"> 11 <p class="row_desc"></p> 12 <input id="full_length" class="row_value" type="number" name="" value="0" min="0"> 13 <select id="full_length_unit"> 14 <option value="m">m</option> 15 <option value="km">km</option> 16 <option class="cm">cm</option> 17 <option value="mm">mm</option> 18 </select> 19 </div> 20 </div> 21 <div class="hinge_support date_cont"> 22 <h3></h3> 23 <div class="number"> 24 <p class="row_desc"></p> 25 <input id="hs_num" class="row_value" type="number" name="" value="0" min="0"> 26 </div> 27 <div class="parts" id="hinge_support_parts"></div> 28 </div> 29 </div><!-- date --> 30 </div><!-- lng_table -->

JavaScripe

1 $(".hinge_support .number input").on('input', function(event) { 2 var codes = ""; 3 for (var i=0; i < $(this).val(); i++) { 4 var code = '<div class="part part_'+ (i+1) +'">' 5 +'<p class="part_title">'+ (i+1) +'個目</p>' 6 +'<div class="position">' 7 +'<p class="row_desc">位置</p>' 8 +'<input id="hs_'+ (i+1) + '_posit" class="row_value" type="number" name="" id="" value="0" min="0">' 9 +'<select id="hs_'+ (i+1) + '_posit_unit">' 10 +'<option value="m">m</option>' 11 +'<option value="km">km</option>' 12 +'<option class="cm">cm</option>' 13 +'<option value="mm">mm</option>' 14 +'</select>' 15 +'</div>' 16 +'</div>'; 17 codes = codes + code; 18 } 19 document.getElementById('hinge_support_parts').innerHTML = codes; 20 if ( $(this).val() == 0) { 21 document.getElementById('hinge_support_parts').innerHTML = " "; 22 } 23 }); 24 25 document.getElementById("proStart").onclick = function(){ 26 var full_length = unitChange($("#full_length").val(),$('#full_length_unit').val()); 27 28 var hs = []; 29 hs[0] = $("#hs_num").val(); 30 i = 1; 31 for (var j = 0; j < hs[0]; j++) { 32 hs[i] = {}; 33 hs[i]["position"] = unitChange($("#hs_"+ i + "_posit").val(),$("#hs_"+ i + "_posit_unit").val()); 34 i++; 35 } 36 37   for (var i = 0; i < hs[0] ;i++) { 38    var a = hs[i+1]["position"]; 39     var b = full_length; 40     console.log(a); 41     console.log(b); 42     console.log(a>b); 43     console.log(a<b); 44     console.log(a===b); 45   } 46  }; 47 48 function unitChange(value,unit) { 49 if(unit == "km") { 50 value /= 1000; 51 } else if(unit == "cm") { 52 value *= 100; 53 } else if(unit == "mm") { 54 value *= 1000; 55 } 56 if(unit == "kN") { 57 value /= 1000; 58 } 59 return value; 60 } 61

試したこと

console上でa,bそれぞれの値を確認したうえでもおかしな判定が出ます。
例)a:9 , b:10 が与えられている。
console.log(a) -> 9
console.log(b) -> 10
console.log(a>b) -> true

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/05/04 08:40

(質問文は編集できます)変数hs や変数full_length の定義も質問文に追記してください。
helloinf

2020/05/04 09:03

すみません、修正しました。コンソール上ではa,bの値は把握できるのですが、その変数を用いて条件式を立てると結果がおかしいです。把握したa,bの値を使って直接条件式を立てると正しい判定はでます。
kei344

2020/05/04 09:42

何度もすみません、HTMLが無いと状況が再現しきれません。#hs_num や #hs_"+ i + "_posit_unit 等にどのような入力があるのかがわかりません。
helloinf

2020/05/04 09:59

こちらこそ、申し訳ないです。HTMLコード追加しました。入力欄が増えたり減ったりする仕組みなのですが、この場合h[0]は1とすることで、入力欄は1個のみとしています。
kei344

2020/05/04 10:08

HTMLのどこに何を入力して、どこを押した際に問題の状況になるのでしょう。
helloinf

2020/05/04 10:25

HTMLにおいて .date .general .number input(id=full_length)に10を入力。 .date .general .number select(id=full_length_unit)はmを選択。(m以外が選択された場合単位換算を行うため、unitChenge()関数上ではmは無視されます。) .date .hinge_support .number input(id=hs_num)に1を入力。 すると.date .hinge_support .parts 内に .part_1が生成される。 JavaScriptで生成されたHTML上において .date .hinge_support .parts .part_1 .position inputに9を入力。 .date .hinge_support .parts .part_1 .position selectはmを選択。 以上のデータを入力して .lng__table .tab .start(id=proStart)をクリックした場合に問題が発生します。
guest

回答1

0

ベストアンサー

input要素の値は文字列なので、そのためだと思います。

js

1console.log(a,b,a>b,a<b,a===b,typeof a,typeof b); 2// 9 10 true false false string string 3```**動くサンプル:**[https://jsfiddle.net/b03xa1y5/](https://jsfiddle.net/b03xa1y5/) 4 5--- 6 7【HTMLInputElement - Web API | MDN8[https://developer.mozilla.org/ja/docs/Web/API/HTMLInputElement](https://developer.mozilla.org/ja/docs/Web/API/HTMLInputElement) 9 10【parseInt() - JavaScript | MDN11[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/parseInt](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/parseInt)

投稿2020/05/04 10:35

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helloinf

2020/05/04 10:52

型がおかしかったんですね! すごく悩んでいたので、助かりました。 ご丁寧に対応ありがとうございました。
oikashinoa

2020/05/04 10:55

スマホからなので簡単に。 console.log(typeof a) で型を調べると良いですよ
helloinf

2020/05/04 11:06

調べてみます! そのような機能は知らなかったので助かります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問