javascript - jQuery 函数不适用于克隆

标签 javascript jquery clone

我在 j 查询函数计算克隆后的日期时遇到问题, 我需要自动计算用户选择 checkin 和 checkout 日期并将其放入文本框后的天数,它适用于第一行但不适用于克隆行

DEMO

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
 <script type="text/javascript">
        function GetDays(){
                var dropdt = new Date(document.getElementById("drop_date").value);
                var pickdt = new Date(document.getElementById("pick_date").value);
                return parseInt((dropdt - pickdt) / (24 * 3600 * 1000));
        }
        function cal(){
        if(document.getElementById("drop_date")){
            document.getElementById("numdays2").value=GetDays();
        }  
    }
    </script>
<script type="text/javascript">
$(document).ready(function(){
  var genroomid = 2;    
  $( ".add-row" ).click(function(){
      var $clone = $( "ul.personal-details" ).first().clone();
      var $input = $clone.find('#roomid');
      $input.val(genroomid).attr('genroomid' , +genroomid)  
      $clone.append( "<button type='button' class='remove-row'>-</button>" );
      $clone.insertBefore( ".add-row" );
      genroomid++; // increase id by 1
  });
  $( ".form-style-9" ).on("click", ".remove-row", function(){
      $(this).parent().remove();
      genroomid--;
  });
  });
  </script>
  </head>
  <body>
  <form name="form_reservations" method="post" action="add.php">
  <span class="form-style-9">
        <ul class="personal-details">
                <label for="roomid">RoomID</label>
                <input name="roomid[]" type="text" class="stretchnights" id="roomid"  readonly="readonly" value="1">    
                <label for="chkin">Check IN</label>
                <input class="stretchdate" size="15" width="15"  id="pick_date" type="date"  name="chkin[]"  onchange="cal()" required/>
                <label for="chkout">Check Out</label>
                <input class="stretchdate"  id="drop_date" type="date" name="chkout[]"  onchange="cal()" required/>
                <label for="nights">Nights    
                <input class="stretchnights" type="text"   id="numdays2"  name="nights[]" readonly /></label>
       </ul>
        <button type="button" class="add-row">+ New Client</button>
      </span>
</form>
</body>

最佳答案

您分享的代码段中存在很多问题,您正尝试在原始元素中使用 ID 并克隆它,这对您的用例来说不是个好主意。您可以做的是将其转换为类,然后将目标元素传递给 cal()。通过这样做你可以找到元素。而且你的夜间标签没有正确关闭

替换现有的脚本 block

<script type="text/javascript">
        function GetDays(target){
                var dropdt = new Date($(target).find(".drop_date").val());
                var pickdt = new Date($(target).find(".pick_date").val());
                return parseInt((dropdt - pickdt) / (24 * 3600 * 1000));
        }
        function cal(target){   
            console.log($(target).parent(), $(target).parent().find('numdays2'));
            $(target).parent().find('.numdays2').val(GetDays($(target).parent()));
        }  
    </script>

并用这个替换你的 .personal-details html block

<ul class="personal-details">
        <label for="roomid">RoomID</label>
        <input name="roomid[]" type="text" class="stretchnights" id="roomid"  readonly="readonly" value="1">    
        <label for="chkin">Check IN</label>
        <input  size="15" width="15"  id="pick_date" class="pick_date" type="date"  name="chkin[]"  onchange="cal(this)" required/>
        <label for="chkout">Check Out</label>
        <input  id="drop_date" type="date" name="chkout[]"  class="drop_date" onchange="cal(this)" required/>
        <label for="nights">Nights  </label>  
        <input class="numdays2" type="text" id="numdays2" name="nights[]" readonly />

这应该可以解决问题

关于javascript - jQuery 函数不适用于克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434345/

相关文章:

javascript - 这里 map 放大集群点击

javascript - HTML 注入(inject)时使用 CDN 或外部域的内联脚本后执行脚本文件

javascript - jqplot如何显示饼图外的标签?

javascript - Backbone.js 按钮单击事件会针对按钮的所有实例触发,而不仅仅是被单击的实例。为什么?

python - 运行 setup.py 时更改包名称

javascript - 获取 JS 创建元素的 ID/名称

jQuery 的 .clone(true, true) 不会克隆子级上的事件绑定(bind)

javascript - 如何通过鼠标悬停来制作图案

javascript - sessionStorage 与 cookie 中的 JWT token ?

asp.net - 使用jquery ajax asp.net 4.0调用asmx服务