首页 > 解决方案 > jQuery 多日期生成

问题描述

我有开始日期和结束日期的简单表格。我想实现这一点,当我选择开始日期时,将自动生成结束日期(+3 个月)。问题是我有一个绿色按钮,它会生成另外几个日期输入。我需要该脚本来处理动态生成的输入,它们具有相同的类和名称,但可以具有不同的值。因为现在它适用于第一个输入,并且不适用于下一个可以有不同开始日期的人,所以它会自动有另一个结束日期。

$('#skaicius').val(2);
$(document).ready(function() {
  $('#duomenys').submit(function() {
    $('#skaicius').val($('.fieldGroup').length * 1 + 1);
  })
  //papildomu pareigu limitas
  var maxGroup = 10;
  //$('#skaicius').val(2);
  //papildomu pareigu pridejimas
  $(".prideti").click(function() {
    if ($('body').find('.fieldGroup').length < maxGroup) {
      var fieldHTML = '<div class="row form-group fieldGroup">' + $(".fieldGroupCopy").html() + '</div>';
      $('body').find('.fieldGroup:last').after(fieldHTML);

    } else {
      alert('Viršintas didžiausias papildomų pareigų skaičius.');
    }
  });



  //papildomu pareigu salinimas
  $("body").on("click", ".salinti", function() {
    $(this).parents(".fieldGroup").remove();

  });



  // Generates start and end date

  $(document).ready(function() {
    $('.darbo_pradzia').change(function() {
      let date = new Date($(this).val());
      let newDate = new Date(date.setMonth(date.getMonth() + 3));
      var day = ("0" + newDate.getDate()).slice(-2);
      var month = ("0" + (newDate.getMonth() + 1)).slice(-2);
      var formatted = newDate.getFullYear() + "-" + (month) + "-" + (day);
      $('.bandomasis_laikotarpis').val(formatted);
    });
  });


});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://kit.fontawesome.com/04b00d367c.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

<div class="container">
  <div class="row form-group fieldGroup">
    <h4>Darbuotojo pareigos</h4>
    <div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-success prideti" title="[Pridėti pareigas]"><span class="fas fa-plus"></span></a></div>

    <div class="col-md-12">
      <label class="text-black" for="dpradzia">Darbo pradžia</label>
      <input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
    </div>
    <div class="col-md-12">
      <label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
      <input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
    </div>


  </div>
  <!-- Papildomos pareigos -->
  <div class="row form-group fieldGroupCopy" style="display: none;">
    <h4>Papildomos pareigos</h4>
    <div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-danger salinti" title="[Šalinti]"><span class="fas fa-minus"></span></a></div>

    <div class="col-md-12">
      <label class="text-black" for="dpradzia">Darbo pradžia</label>
      <input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
    </div>


    <div class="col-md-12">
      <label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
      <input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
    </div>
  </div>
  <!-- Papildomos pareigos pabaiga -->

</div>

标签: javascriptjqueryformsinput

解决方案


几点说明:

  • 不要放几个“ $(document).ready
  • 使用 ' clone' 来复制你的元素,使用 " true, true" 来绑定事件
  • 使用 DOM 树查找要修改的元素。

$('#skaicius').val(2);

$(document).ready(function() {

  $('.darbo_pradzia').on('change', function() {
    var elt = $(this)
    let date = new Date(elt.val());
    let newDate = new Date(date.setMonth(date.getMonth() + 3));
    var day = ("0" + newDate.getDate()).slice(-2);
    var month = ("0" + (newDate.getMonth() + 1)).slice(-2);
    var formatted = newDate.getFullYear() + "-" + (month) + "-" + (day);
    elt.closest('.form-group').find('.bandomasis_laikotarpis').val(formatted);
  });

  $('#duomenys').submit(function() {
    $('#skaicius').val($('.fieldGroup').length * 1 + 1);
  })
  //papildomu pareigu limitas
  var maxGroup = 10;
  //$('#skaicius').val(2);
  //papildomu pareigu pridejimas
  $(".prideti").click(function() {
    if ($('body').find('.fieldGroup').length < maxGroup) {
      $('#fieldGroupCopy').clone(true, true).appendTo('#container').show()
    } else {
      alert('Viršintas didžiausias papildomų pareigų skaičius.');
    }
  });

  //papildomu pareigu salinimas
  $("body").on("click", ".salinti", function() {
    $(this).parents(".fieldGroup").remove();
  });

});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://kit.fontawesome.com/04b00d367c.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

<div class="container" id="container">
  <div class="row form-group fieldGroup">
    <h4>Darbuotojo pareigos</h4>
    <div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-success prideti" title="[Pridėti pareigas]"><span class="fas fa-plus"></span></a></div>

    <div class="col-md-12">
      <label class="text-black" for="dpradzia">Darbo pradžia</label>
      <input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
    </div>
    <div class="col-md-12">
      <label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
      <input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
    </div>


  </div>
  <!-- Papildomos pareigos -->
  <div class="row form-group" id="fieldGroupCopy" style="display: none;">
    <h4>Papildomos pareigos</h4>
    <div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-danger salinti" title="[Šalinti]"><span class="fas fa-minus"></span></a></div>

    <div class="col-md-12">
      <label class="text-black" for="dpradzia">Darbo pradžia</label>
      <input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
    </div>


    <div class="col-md-12">
      <label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
      <input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
    </div>
  </div>
  <!-- Papildomos pareigos pabaiga -->

</div>


推荐阅读