年龄不在现场输出

时间:2015-03-25 09:15:48

标签: javascript jquery datepicker clone

我正在克隆包含日期选择器的div。我使用以下方法修复了datepicker:

// Re-initialize the datepicker
$(".datepicker").each(function() {
   // Remove the class
   $(this).removeAttr('id').removeClass('hasDatepicker');
   // Re-initialize the datepicker
   $(this).datepicker({
      dateFormat: 'yy-mm-dd',
      changeMonth: true,
      changeYear: true,
      yearRange: "-150:+0"
   });
});

该日期选择器的每次更改,都会计算年龄并将值输出到年龄字段。但是,重复不能将字段的值更改为计算的年龄。我无法捕获datepickers ID,因为每次克隆时,id的值都是随机的,所以我使用了一个类。

for (var counts = 1; counts <= 20; counts++) {
   (function(counts) {
      $(".datepicker").each(function() {
         $(".co_birthdate" + counts).on("change", function() {

            var today = new Date();
            var birthDate = new Date($(this).val());
            var age = today.getFullYear() - birthDate.getFullYear();
            var m = today.getMonth() - birthDate.getMonth();
            if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
               age--;
            }

            if (age <= 0) {
               alert("Age value is invalid.");
            } else {
               // Display age
               $("#co_age" + counts).val(age);
            }
         });
      });
   })(counts);
}

这是HTML:

<div class="col-sm-4">
   <div class="form-group  custom-addon-holder">
      <label for="bdate">Birthdate:</label>
      <input type="text" class="form-control datepicker co_birthdate" id='co_birthdate' placeholder="YYYY / MM / DD" name="co-buyer1[co_birthdate]" title="Birthdate" />
      <span class="input-group-addon custom-addon"><i class="fa fa-calendar"></i>
      </span>
   </div>
</div>
<div class="col-sm-4">
   <div class="form-group">
      <label for="bdate">Age:</label>
      <input type="text" class="form-control required co_age" name="co-buyer1[co_age]" id='co_age' title="Age" readonly />
   </div>
</div>

2 个答案:

答案 0 :(得分:0)

我会使用动态生成的元素抛弃id,并使用jQuery的class eq()。另外,在添加datepicker之前,我会存储元素的克隆,以避免删除和重新添加它们。

$(function () {
    // make a clone of the elements before adding the datepicker and store  html
    // this way you dont have to deal with removing and re-adding the datepicker later
    var stemcell = $('.myRow:eq(0)').clone().wrap('<div>').parent().html();

    $('#clone').click(function(){
        // retrieve the clone
        var clone = $(stemcell);
        clone.find('.datepicker').datepicker({
            dateFormat: 'yy-mm-dd',
            changeMonth: true,
            changeYear: true,
            yearRange: '-150:+0'
        });
        $('.myContainer').append(clone);
    });

    // initialize the datepickers present on load
    $('.datepicker').datepicker({
        dateFormat: 'yy-mm-dd',
        changeMonth: true,
        changeYear: true,
        yearRange: '-150:+0'
    });
    // bind change event 
    $('.myContainer').on('change', '.datepicker', function () {
        var birthdate = moment($(this).val());
        var age = Math.floor( moment().diff(birthdate, 'years', true));
        if (age < 1) {
            alert("Age value is invalid.");
        } else {
            // get index of chaneged co_birthdate field
            var cur = $('.co_birthdate').index($(this));
            // set age to the co_age element at the same index
            $('.co_age').eq(cur).val(age);
        }
    });
});

 
.myRow{
   margin-bottom:20px; 
    
}
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
<input type="button" id="clone" value="Clone Elements"/>
<br>
    <br>
<div class="myContainer">
    <div class="myRow">
        <div class="col-sm-4">
            <div class="form-group  custom-addon-holder">
                <label for="bdate">Birthdate:</label>
                <input type="text" class="form-control datepicker co_birthdate" class='co_birthdate' placeholder="YYYY / MM / DD" name="co-buyer1[co_birthdate]" title="Birthdate" /> <span class="input-group-addon custom-addon"><i class="fa fa-calendar"></i>
      </span>

            </div>
        </div>
        <div class="col-sm-4">
            <div class="form-group">
                <label for="bdate">Age:</label>
                <input type="text" class="form-control required co_age" name="co-buyer1[co_age]" class='co_age' title="Age" readonly />
            </div>
        </div>
    </div>
</div>

答案 1 :(得分:-1)

您可以用HTML格式定义ID $(&#34;#co_age&#34; +计数)。 我认为你只定义了(&#34;#co_age&#34;)但是在未找到的ID字符串中添加了计数