jQuery DatePicker:多个输入给出错误

jQuery DatePicker : Multiple input giving an error

我正在使用 jQuery DatePicker 插件。

功能

目前我正在处理一种具有 table 的表单,并且允许用户通过单击按钮向 table 添加行。工作得很好。

现在我想实现 DatePicker 插件,这样用户就可以通过单击添加日期。

问题

目前我遇到一个问题,当用户添加一行时,日期选择器停止工作。我正在使用 class 这样它就不会产生问题。 我尝试过的 是在用户添加新行时破坏日期选择器实例,但这样做会给我一个错误

Uncaught TypeError: Cannot read property 'append' of undefined

我尝试了 google,但其中 none 与我关于此错误的问题相关。

谁能帮我解决这个问题?

( function( $ ) {
  
//Add Row  
  function addRow(tableID) {
  var table = document.getElementById(tableID);
  var rowCount = table.rows.length;
  if(rowCount < 5){       // limit the user from creating fields more than your limits
   var row = table.insertRow(rowCount);
   var colCount = table.rows[0].cells.length;
   for(var i=0; i<colCount; i++) {
    var newcell = row.insertCell(i);
    newcell.innerHTML = table.rows[0].cells[i].innerHTML;
   }
  }else{
    alert("Currently You can add only up to 5 Exams.");
       
  }
 }
//Delete Row 
 function deleteRow(tableID) {
  var table = document.getElementById(tableID);
  var rowCount = table.rows.length;
  for(var i=0; i<rowCount; i++) {
   var row = table.rows[i];
   var chkbox = row.cells[0].childNodes[0];
   if(null != chkbox && true == chkbox.checked) {
    if(rowCount <= 1) {       // limit the user from removing all the fields
     alert("Cannot Remove all fields.");
     break;
    }
    table.deleteRow(i);
    rowCount--;
    i--;
   }
  }
 }
 $( ".datepicker" ).datepicker({ dateFormat: 'dd-mm-yy' } );
  
 $(".add_").click(function(){
  addRow('dataTable');
  $(".datepicker").datepicker("destroy");
  //$( ".datepicker" ).datepicker({ dateFormat: 'dd-mm-yy' } );
  //alert("Alert");
 });
  
} )( jQuery );
{
    padding: 0;
    margin: 0;
    border: 0;
}
body, html {
    color: #373C40;
    font-family: Verdana,Arial, Helvetica, sans-serif;
    height: 100%;
    background-color: #f0f0f0;
    margin:10px;
}
body {
    font-size: 70%;
}
p {
    padding: 7px 0 7px 0;
    font-weight: 500;
    font-size: 10pt;
}
a {
    color: #656565;
    text-decoration:none;
}
a:hover{
    color: #4C99CC;
    text-decoration: none;
}
h1 {
    font-weight:200;
    color: #888888;
    font-size:16pt;
    padding-left:33px;
    margin:8px ;
}
.clear{
 width:100%;
 float:none;
 clear:both;
}
form.register{
    width:800px;
    margin: 20px auto 0px auto;
    background-color:#fff;
    padding:5px;
}
form p{
    font-size: 8pt;
    clear:both;
    margin: 0;
    color:gray;
    padding:4px;
}
fieldset.row1{
    width:100%;
    padding:5px;
    float:left;
    border-top:1px solid #F5F5F5;
    margin-bottom:15px;
}
fieldset.row2{
    border-top:1px solid #F1F1F1;
    border-right:1px solid #F1F1F1;
    padding:5px;
    float:left;
 min-height:220px;
}
fieldset.row3{
 border-top: 1px solid #F1F1F1;
 padding: 5px;
 float: left;
 margin-bottom: 15px;
 width: 159px;
 
}
fieldset.row4,fieldset.row5{
    border-top:1px solid #F1F1F1;
    border-right:1px solid #F1F1F1;
    padding:5px;
    float:left;
    clear:both;
}
fieldset.row5{
 width:100%;
}

.register .form label{
    float: left;
    text-align: left;
    margin-right: 5px;
    margin-top:2px;
    width:auto;
}
.register .form input{
 width:100px;
}
.form td{
 border-right:1px solid #F1F1F1;
 border-top:1px solid #F1F1F1;
 border-bottom:1px solid #F1F1F1;
 border-left:0px solid #F1F1F1;
 padding:2px;
 margin:0;
}
.register legend{
    color: #4C99CC;
    padding:2px;
    margin-left: 14px;
    font-weight:bold;
    font-size: 14px;
    font-weight:100;
}
.register label{
    color:#444;
    width:100px;
    float: left;
    text-align: right;
    margin-right: 6px;
    margin-top:2px;
}
form.register label.optional{
    float: left;
    text-align: right;
    margin-right: 6px;
    margin-top:2px;
    color: #A3A3A3;
}
form.register label.obinfo{
    float:right;
    padding:3px;
    font-style:italic;
}
form.register input{
    width: 140px;
    color: #505050;
    float: left;
    margin-right: 5px;
}
form.register input.long{
    width: 247px;
    color: #505050;
}
form.register input.short{
    width: 40px;
    color: #505050;
}
form.register input[type=radio]{
    float:left;
    width:15px;
}
form.register label.gender{
    margin-top:-1px;
    margin-bottom:2px;
    width:34px;
    float:left;
    text-align:left;
    line-height:19px;
}
form.register input[type=text]{
    border: 1px solid #E1E1E1;
    height: 18px;
}
form.register input[type=password]{
    border: 1px solid #E1E1E1;
    height: 18px;
}

form.register input[type=button]:hover{
 cursor:pointer;
 background:#ccc;
}
form.register  .submit{
    color: #fff;
    cursor: pointer;
    float:left;
    margin:10px;
 padding:5px;
 background: #4C99CC;
 background-image: linear-gradient(bottom,rgba(0, 0, 0, 0.1) 0,rgba(255, 255, 255, 0.1) 100%);
 background-image: -o-linear-gradient(bottom,rgba(0, 0, 0, 0.1) 0,rgba(255, 255, 255, 0.1) 100%);
 background-image: -moz-linear-gradient(bottom,rgba(0, 0, 0, 0.1) 0,rgba(255, 255, 255, 0.1) 100%);
 background-image: -webkit-linear-gradient(bottom,rgba(0, 0, 0, 0.1) 0,rgba(255, 255, 255, 0.1) 100%);
 background-image: -ms-linear-gradient(bottom,rgba(0, 0, 0, 0.1) 0,rgba(255, 255, 255, 0.1) 100%);
 background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0,rgba(0, 0, 0, 0.1)),color-stop(1,rgba(255, 255, 255, 0.1)));

}
form.register  .submit:hover{
 background:#505050;

}
form.register  .submit:active{
 background:#ccc;
  color: #000;
}
form.register input[type=text].small{
    border: 1px solid #E1E1E1;
    height: 18px;
    width:75px;
}
form.register input[type=checkbox] {
    width:34px;
    margin-top:4px;
}
form.register select{
    border: 1px solid #E1E1E1;
    float:left;
    margin-bottom:3px;
    color: #505050;
    margin-right:5px;
}
input:focus, select:focus{
    background-color: #F1F1F1;
}
p.info{
    font-size:7pt;
    color: gray;
}
p.agreement{
    margin-left:15px;
}
p.agreement label{
    width:390px;
    text-align:left;
    margin-top:3px;
}
<form class="register" method="post" action="">
  <p> 
   <input type="button" class="add_" value="Add Fields"  /> 
   <input type="button" class="add_" value="Remove All Added Fields" onClick="deleteRow('dataTable')"  /> <!-- onClick="addRow('dataTable')"  deleteRow('dataTable') -->

  </p> 
    <table id="dataTable" class="form" border="1">
    <tbody>
   <tr>
     <p>
    <td><input type="checkbox" required="required" name="chk[]" checked="checked" /></td>
    <td>
     <label>Chapter</label>
     <input type="text" required="required" name="BX_NAME[]">
     </td>
     <td>
     <label for="BX_date">Date</label>
     <input type="text" required="required" class="small datepicker"  name="BX_date[]" id="datepicker">
     </td>
     <td>
     <label for="BX_gender">Gender</label>
     <select id="BX_gender" name="BX_gender" required="required">
      <option>....</option>
      <option>Male</option>
      <option>Female</option>
     </select>
     </td>
     </p>
   </tr>
   </tbody>
  </table>
  <input type="submit" value="Save" class="submit" /> 
 </form>

已解决

通过在用户添加行时重新排序代码行解决。

    $(".datepicker").datepicker("destroy");
    addRow('dataTable');
    $( ".datepicker" ).datepicker({ dateFormat: 'dd-mm-yy' } );

新刊

我现在面临的新问题是,无论我从哪个输入框添加日期,它都只将日期添加到第一个输入。

可能有什么解决方案?

对于动态添加的日期选择器,最好的方法是这样做

$('body').on('focus', '.datepicker', function(){
   $(this).datepicker({ dateFormat: 'dd-mm-yy' } );
}).on('click', '.datepicker', function(){
   $(this).datepicker({ dateFormat: 'dd-mm-yy' } );
});

此外,您对多个输入使用相同的 id

这是一个demo

希望对您有所帮助。