2017-11-08 3 views
1

DOBに基づいて年齢を自動的に計算するこのスクリプトはありますが、残念ながら しか最初の行で動作しません。私はすでにスクリプトでクラスセレクタを使用していますが、問題を解決してください。年齢の自動計算スクリプトは最初の行でのみ動作します

$(document).ready(function() { 
 
    $(".birthdate").change(function() { 
 
    var value = $(".birthdate").val(); 
 
    var dob = new Date(value); 
 
    var today = new Date(); 
 
    var age = Math.floor((today - dob)/(365.25 * 24 * 60 * 60 * 1000)); 
 
    if (isNaN(age)) { 
 
     age = 0; 
 
    } else { 
 
     age = age; 
 
    } 
 
    $('.age').val(age); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:92% ">Date of Birth:</span> 
 
    <input type="date" class="form-control birthdate" aria-describedby="sizing-addon1" style="width:153.8%;" name="birthdate" required=""> 
 
</div> 
 

 

 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:84% ">Age:</span> 
 
    <input type="text" class="form-control age" aria-describedby="sizing-addon1" style="width:140%;" placeholder="Enter age" name="age" readonly=""> 
 
</div>

+0

使用 'dob.getTime() - Date.now()'の代わりに。正しいMathを実行するにはミリ秒のフォーマットが必要です。 – PHPglue

+2

「残念ながら、最初の行でのみ動作します。」とはどういう意味ですか?私は本当にあなたの質問を得ることができません。 – urvashi

+0

@urvashiはい、PHP、SQLを使用してHTMLをループします。私の問題は、自動的に年齢が最初の行だけで計算されている計算です。 – mojoe

答えて

2

あなたはchangeで計算を取得するために、適切なbirthdate.ageを取得するために$(this)を使用することができます。参照のために下のスニペットを確認してください。

$(document).ready(function() { 
 
    $(".birthdate").change(function() { 
 
    var value = $(this).val(); 
 
    var dob = new Date(value); 
 
    var today = new Date(); 
 
    var age = Math.floor((today - dob)/(365.25 * 24 * 60 * 60 * 1000)); 
 
    if (isNaN(age)) { 
 
     age = 0; 
 
    } else { 
 
     age = age; 
 
    } 
 
    $(this).closest('.input-group').next('.input-group').find('.age').val(age); 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:92% ">Date of Birth:</span> 
 
    <input type="date" class="form-control birthdate" aria-describedby="sizing-addon1" style="width:153.8%;" name="birthdate" required=""> 
 
</div> 
 

 

 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:84% ">Age:</span> 
 
    <input type="text" class="form-control age" aria-describedby="sizing-addon1" style="width:140%;" placeholder="Enter age" name="age" readonly=""> 
 
</div> 
 
<hr> 
 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:92% ">Date of Birth:</span> 
 
    <input type="date" class="form-control birthdate" aria-describedby="sizing-addon1" style="width:153.8%;" name="birthdate" required=""> 
 
</div> 
 

 

 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:84% ">Age:</span> 
 
    <input type="text" class="form-control age" aria-describedby="sizing-addon1" style="width:140%;" placeholder="Enter age" name="age" readonly=""> 
 
</div>

アップデート:か、スニペット以下のすべての.birthdateのチェックをループにしたい場合。

$(document).ready(function() { 
 
    $('.calcBtn').click(function() { 
 
    $(".birthdate").each(function() { 
 
     var value = $(this).val(); 
 
     var dob = new Date(value); 
 
     var today = new Date(); 
 
     var age = Math.floor((today - dob)/(365.25 * 24 * 60 * 60 * 1000)); 
 
     if (isNaN(age)) { 
 
     age = 0; 
 
     } else { 
 
     age = age; 
 
     } 
 
     $(this).closest('.input-group').next('.input-group').find('.age').val(age); 
 
    }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:92% ">Date of Birth:</span> 
 
    <input type="date" class="form-control birthdate" aria-describedby="sizing-addon1" style="width:153.8%;" name="birthdate" required=""> 
 
</div> 
 

 

 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:84% ">Age:</span> 
 
    <input type="text" class="form-control age" aria-describedby="sizing-addon1" style="width:140%;" placeholder="Enter age" name="age" readonly=""> 
 
</div> 
 
<hr> 
 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:92% ">Date of Birth:</span> 
 
    <input type="date" class="form-control birthdate" aria-describedby="sizing-addon1" style="width:153.8%;" name="birthdate" required=""> 
 
</div> 
 

 

 
<div class="input-group input-group-sm"> 
 
    <span class="input-group-addon" id="sizing-addon1" style="width:84% ">Age:</span> 
 
    <input type="text" class="form-control age" aria-describedby="sizing-addon1" style="width:140%;" placeholder="Enter age" name="age" readonly=""> 
 
</div> 
 
<hr> 
 
<input type="button" class='calcBtn' value="Calculate">

+0

ありがとう!上記のコードはすでに正常です.. – mojoe

1

それは常に最初の要素を指すようになりますように主な問題は

var value = $(".birthdate").val(); 

であり、使用してみてください -

それが動作するはず

var value = $(this).val(); 
...

+0

ありがとう!私はその考えを得た。 – mojoe

関連する問題