事件委托问题

时间:2015-01-05 19:39:03

标签: javascript html

我正在尝试在填充表格后克隆表格。在td里面我放了一些输入和textarea标签。我遇到的问题是没有克隆表中的内容。我曾尝试使用事件委托,但似乎我做错了。 这是JSfiddle,在表格中写一些东西,然后按克隆.` 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);
    });

1 个答案:

答案 0 :(得分:0)

这是一个jquery错误 - 深度克隆不适用于textareas 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());
    }
 });