2012-11-09 78 views
1

我有一個動態表,用戶可以在其中添加和刪除行。當用戶點擊一個按鈕添加一行時,我想插入一個存儲的jQuery對象,它是初始表格行.baseRow的副本。在這一行中,我也希望有一個委託單擊事件保持活動狀態以用於將來添加的行。複製存儲的jQuery對象,同時保持委派事件

但是,有兩個問題展示了我目前的實現(在Chrome/IE中測試)。首先是點擊處理程序在第一個事件被觸發後中斷。我可以通過在.clone()之後鏈接.html()來解決此問題,但是當我這樣做時,克隆被莫名其妙地剝離了父元素tr,並且簡化爲僅兒童元素。

的問題,或下面的代碼示例的例子見this js fiddle

JS

$('document').ready(function(){ 
    var $baseRow = $('.baseRow').clone(true,true); 
    $('table').delegate('.addRow','click',function(){ 
     $('tbody').append($baseRow); 
    }); 
});​ 

HTML

<table> 
    <thead> 
     <tr> 
      <th>Add Row</th> 
      <th>Header 1</th> 
      <th>Header 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr class="baseRow"> 
      <td class="addRow">+</td> 
      <td>Body 1</td> 
      <td>Body 2</td> 
     </tr> 
    </tbody> 
</table> 

回答

3

您複製一次,並反覆追加該克隆元素。由於只有一個克隆,因此您不會擁有兩個以上的元素(原始+克隆)。相反,單擊時克隆,以便克隆數量等於點擊數量:http://jsfiddle.net/YxB9J/5/

$(document).ready(function(){ 
    var $baseRow = $('.baseRow'); 
    $('table').delegate('.addRow','click',function(){ 
     $('tbody').append($baseRow.clone(true, true)); 
    }); 
}); 
+0

這很有趣!我的印象是,一個克隆可以用於多個拷貝,因此一旦我更加高效,就可以克隆。 – Moses

+0

@Moses:基本上,你所謂的「複製」就是「克隆」。 '.clone()'只是給你一個像原始的單個新元素 - 克隆沒有「特殊」功能或其他東西。 – pimvdb

+0

沒錯,我只是希望它的行爲與傳統操作系統中的複製/粘貼行爲類似,複製粘貼在多個粘貼中。但是,似乎並非如此。 – Moses