前提・実現したいこと
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
(質問文は編集できます)変数hs や変数full_length の定義も質問文に追記してください。
すみません、修正しました。コンソール上ではa,bの値は把握できるのですが、その変数を用いて条件式を立てると結果がおかしいです。把握したa,bの値を使って直接条件式を立てると正しい判定はでます。
何度もすみません、HTMLが無いと状況が再現しきれません。#hs_num や #hs_"+ i + "_posit_unit 等にどのような入力があるのかがわかりません。
こちらこそ、申し訳ないです。HTMLコード追加しました。入力欄が増えたり減ったりする仕組みなのですが、この場合h[0]は1とすることで、入力欄は1個のみとしています。
HTMLのどこに何を入力して、どこを押した際に問題の状況になるのでしょう。
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)をクリックした場合に問題が発生します。
回答1件
あなたの回答
tips
プレビュー