jQueryを使ってWebアプリを作成しています。
かんたんな単位換算なのですが、換算する単位ごとに、if構文を作っているのですが、変数やelseの処理など、同じコードを書く部分があります。
同じコードを書く部分については、任意関数などを作って、ドライアップしたいと思うのですが、自分で作ってみてもうまくいきませんでした。
以下HTMLとjQueryのコードです。
HTML
1<div class="row"> <!-- 一段目 --> 2 <div class="col-auto"> <!-- インチ --> 3 <div class="card" style="max-width:20rem;"> 4 <div class="card-title h2 text-center">Inch</div> 5 <img class="card-img-top" src="picforucv/inch.png" alt="image of centimeter"> 6 <div class="card-body" style="text-align: center;"> 7 <form class="form-inline"> 8 <input style="width: 120px;" type="number" class="form-control mb-2 mr-sm-2" id="inch" name="inch" value="" > 9 <h3> Inch</h3> 10 </form> 11 <button type="button" class="btn-info" id="btnfin">Convert</button> 12 </div> <!-- card-body終わり --> 13 </div> <!-- card終わり --> 14 </div> <!-- col-4終わり --> 15 16 <div class="col-auto"> <!-- センチ --> 17 <div class="card" style="max-width:20rem;"> 18 <div class="card-title h2 text-center">Centi meter</div> 19 <img class="card-img-top" src="picforucv/centimeter.jpg" alt="image of centimeter"> 20 <div class="card-body" style="text-align: center;"> 21 <form class="form-inline"> 22 <input style="width: 120px;" type="number" class="form-control mb-2 mr-sm-2" id="cm" name="cm" value="" > 23 <h3> cm</h3> 24 </form> 25 <button type="button" class="btn-info" id="btnfin">Convert</button> 26 </div> <!-- card-body終わり --> 27 </div> <!-- card終わり --> 28 </div> <!-- col-4終わり --> 29 30 <div class="col-auto"> <!-- メートル --> 31 <div class="card" style="max-width:20rem;"> 32 <div class="card-title h2 text-center">Metre</div> 33 <img class="card-img-top" src="picforucv/meter.png" alt="origin of mtere"> 34 <div class="card-body" style="text-align: center;"> 35 <form class="form-inline"> 36 <input style="width: 120px;" type="number" class="form-control mb-2 mr-sm-2" id="m" name="m" value="" > 37 <h3> m</h3> 38 </form> 39 <button type="button" class="btn-info" id="btnfin">Convert</button> 40 </div> <!-- card-body終わり --> 41 </div> <!-- card終わり --> 42 </div> <!-- col-4終わり --> 43 44 45 </div> <!-- 一段目row終わり-->
jQuery
1 // (1)インチへの単位変換 2 $('#btnfin').click(function() { 3 4//inputタグへの各単位の割当 5 6 const inch = $('#inch').val(); 7 const cm = $('#cm').val(); 8 const m = $('#m').val(); 9 10 11//インチから他の単位系への計算式 12const convertedTocm = inch * 2.5399; /* センチへ */ 13const convertedTom = inch * 2.5399 / 100; /* メートルへ */ 14 15 16//インチに入力があったら他の単位系に計算後の数値を出力する 17if (inch !== '' && cm === '' && m === "" && feet === "" && sun === "" && shyaku === "") { 18 $('#cm').val(Math.round(convertedTocm * 10) / 10); 19 $('#m').val(Math.round(convertedTom * 1000) / 1000); 20 21 22 }else { 23 $('#inch').val(''); 24 $('#cm').val(''); 25 $('#m').val(''); 26 27 } 28 }); 29
jQueryのコードで以下の部分を、他の単位系からの換算のときにも全く同じコードを書くことになるので
任意関数などを作ってドライアップしたいと思っています。
jQuery
1//inputタグへの各単位の割当 2 const inch = $('#inch').val(); 3 const cm = $('#cm').val(); 4 const m = $('#m').val(); 5 6else { 7 $('#inch').val(''); 8 $('#cm').val(''); 9 $('#m').val(''); 10
以下は試したことです。
jQuery
1function unitAllocation(){ 2 const inch = $('#inch').val(); 3 const cm = $('#cm').val(); 4 const m = $('#m').val(); 5} 6 7 // (1)インチへの単位変換 8 $('#btnfin').click(function() { 9 10//inputタグへの各単位の割当 11unitAllocation(); 12 13 14//インチから他の単位系への計算式 15const convertedTocm = inch * 2.5399; /* センチへ */ 16const convertedTom = inch * 2.5399 / 100; /* メートルへ */ 17 18 19//インチに入力があったら他の単位系に計算後の数値を出力する 20if (inch !== '' && cm === '' && m === "" ) { 21 $('#cm').val(Math.round(convertedTocm * 10) / 10); 22 $('#m').val(Math.round(convertedTom * 1000) / 1000); 23 24 25 }else { 26 $('#inch').val(''); 27 $('#cm').val(''); 28 $('#m').val(''); 29 30 } 31 }); 32 33
各単位への入力及び表示のinputタグへの割当を任意関数を作ってやってみたのですが、うまく動きません。
具体的には、インチの入力欄に1を入力して、convertボタンをクリックしても、反応せず、他の単位に換算された数値が入りませんでした。
上記の様にドライアップしていないコードでは、換算された数値が入力されうまく動きます。
つまり、unitAllocation();という関数を作成しないで、
$('#btnfin').click(function() {
の下に、
const inch = $('#inch').val();
const cm = $('#cm').val();
const m = $('#m').val();
を書いたコードでは、インチの入力欄に数値を入力し、Convertボタンをクリックすると、他の単位の入力欄に換算された数値が入り動きます。
elseの部分もドライアップしたいと思っています。
上記のような場合は、どのようにしたら正しくドライアップできるのでしょうか?
あるいは、できないものなのでしょうか?
初心者なので、お手数とは思いますが、噛み砕いて説明いただけますと大変助かります。
よろしくお願いいたします。