2015-01-05 88 views
0

我想在表填充後​​克隆表。在TD內部我放置了一些輸入和textarea標籤。我的問題是表內的內容沒有被克隆。我試圖使用事件代表團,但似乎我做錯了什麼。 這裏是的jsfiddle,寫在表內的東西,然後按clone.`` http://jsfiddle.net/no84bror/2/事件代表團問題

$("#clonetable").on('click','textarea',function(){ 
    var tempTable = $('#masterTable'); 
    var temClone = $("<div/>").append(tempTable.clone()).html(); 
    // alert(temClone); 
    var rep = temClone.replace("textarea","p"); 
    $("#a").html(rep); 
    }); 
+0

這裏是鏈接http://jsfiddle.net/no84bror/2/ – Joel

+2

代碼放在你的問題吧。 – j08691

+1

從[clone()docs](http://api.jquery.com/clone/#warning):「注意:出於性能原因,某些表單元素的動態狀態(例如,鍵入textarea和user的用戶數據選擇所做的選擇)不會複製到克隆的元素中。「 –

回答

0

這是一個jQuery錯誤 - 深克隆不爲文字區域http://bugs.jquery.com/ticket/3016 它開始爲Firefox中的一個問題,但工作顯然,在Chrome中是一樣的。

「當前的行爲記錄在api.jquery.com當然這裏有一個插件可以提供請求的行爲,票據被標記爲patchwelcome,但是要解決這個邊緣案例在jQuery中的警告會導致性能在不需要時打90%的時間。「

以下代碼工作並複製輸入字段的內容,但由於上述錯誤,您必須自己複製textareas的內容或使用該插件。

$("#clonetable").on('click', function(){ 
    $("#a").html($('#masterTable').clone()); 
}); 

您可以嘗試使用.clone([withDataAndEvents][, deepWithDataAndEvents]),在使用.clone(true, true)換言之,但它並沒有區別。


下面的代碼,其中包括黑客複製textarea的內容:

$("#clonetable").on('click',function(){ 
    $("#a").html($('#masterTable').clone()); 
    var my_textareas  = $('#masterTable textarea').slice(2,4); 
    var result_textareas = $("#a textarea"); 

    for (var i = 0, l = my_textareas.length; i < l; ++i){ 
     $(result_textareas[i]).val($(my_textareas[i]).val()); 
    } 
}); 
+0

還有一件事。如果text正好放在html中的textarea標籤之間,然後運行克隆代碼,它將完全包含文本。爲什麼當標籤之間已經存在文本時它能夠正確克隆? – Joel

+0

不知道爲什麼。大概找到並複製加載頁面的東西要比找到「髒」的textareas容易得多,也就是稍後改變。我將包括hack在我的答案中複製textarea內容,我發現這個錯誤報告是在某處。它的工作原理,我在jsfiddle中嘗試過。很明顯,你不能使用ID很多,因爲ID也被克隆,所以你有重複的ID。 – mwarren