2016-05-30 107 views
0

我的代码与静态部分完美结合,但是当我添加新行时,它不会计算字段。我究竟做错了什么?jQuery动态内容计算

还应计算动态领域,它们通过添加行按钮添加

Live DEMO

<div class="container"> 
<table id="t1" class="table table-hover"> 
     <tr> 
      <th class="text-center">Start Time</th> 
      <th class="text-center">End Time</th> 
      <th class="text-center">Stunden</th> 
      <th> <button type="button" class="addRow">Add Row</button></th> 
     </tr> 
     <tr id="row1" class="item"> 
      <td><input name="starts[]" class="starts form-control" ></td> 
      <td><input name="ends[]" class="ends form-control" ></td> 
      <td><input name="stunden[]" class="stunden form-control" readonly="readonly" ></td> 
     </tr> 
    </table> 
</div> 

JS

$(document).ready(function(){ 
$('.item').keyup(function(){ 

     var starts = $(this).find(".starts").val(); 
     var ends = $(this).find(".ends").val(); 
        var stunden; 
     s = starts.split(':'); 
     e = ends.split(':'); 

     min = e[1]-s[1]; 
     hour_carry = 0; 
     if(min < 0){ 
      min += 60; 
      hour_carry += 1; 
     } 
     hour = e[0]-s[0]-hour_carry; 
     min = ((min/60)*100).toString() 
     stunden = hour + "." + min.substring(0,2); 

     $(this).find(".stunden").val(stunden); 
});  

// function for adding a new row 
      var r = 1; 
      $('.addRow').click(function() { 
      if(r<10){ 
       r++; 
       $('#t1').append('<tr id="row'+ r +'" class="item"><td><input name="starts[]" class="starts form-control" ></td><td><input name="ends[]" class="ends form-control" ></td><td><input name="stunden[]" class="stunden form-control" readonly="readonly" ></td></tr>'); 
       } 
      }); 
       // remove row when X is clicked 
      $(document).on("click", ".btn_remove", function() { 
      r--; 
      var button_id = $(this).attr("id"); 
       $("#row" + button_id + '').remove(); 
      }); 


    }); 
+0

第一关,如果你已经有了2行,你应该在3初始化r,而不是1,ids应该是唯一的 –

+0

我已经删除了第二个静态行,但仍然不起作用!在我看来,因为它没有看到正在添加的这个新的动态行。 – lewis4u

回答

2

,最好的办法是使用其用于将一个或多个事件处理程序附加到元素的.on()事件:

$(document).on('keyup', '.item',function(){ 
//your code 
} 
0

当你动态地添加一个新行到表中, “keyup”事件不会自动绑定到它。实际上,您需要将“keyup”事件绑定包装到函数中,然后在添加新行后调用它。沿着线的东西:

function rebindKeyup(){ 
     $('.item').keyup(function(){ 
     // Key up logic 
     } 
} 
+0

你可以修复它在我的链接http://codepen.io/anon/pen/WxNPEp – lewis4u

+0

当然:http://codepen.io/JasonGraham/pen/NrWoEv –

+0

Agramer对我来说是最好的答案!但谢谢! – lewis4u