【问题标题】:jQuery multiple date generationjQuery 多日期生成
【发布时间】:2020-06-07 22:34:19
【问题描述】:

我有开始日期和结束日期的简单表格。我想实现这一点,当我选择开始日期时,将自动生成结束日期(+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>

【问题讨论】:

    标签: javascript jquery forms input


    【解决方案1】:

    几点说明:

    • 不要放几个“$(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>

    【讨论】:

    • 抱歉,这是一个不好的解决方案,因为 id 为多个生成的表单提供了相同的 id,而另一个问题我在生成时需要同一个类,因为我正在计算它们。
    • 您没有在您的问题中精确说明这一点,您不能不接受答案...您在说什么 ID 和什么类?这不严重...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2014-02-25
    相关资源
    最近更新 更多