使用jQuery克隆函数形式问题(Problem using jQuery clone functi

2019-08-17 23:17发布

的代码,你会检查这些snippes工作正常的FF,Chrome浏览器,Safari浏览器,但似乎运行jQuery的克隆功能时,与IE浏览器的问题:

我的模板:

<form method="post" action="/post/add/">
{{ form.management_form }}
    <div class='table'>
      <table class='no_error'>
        <input id="id_mypost_set-0-title" type="text" name="mypost_set-0-title" />
        <input id="id_mypost_set-0-content" type="text" name="mypost_set-0-content" />
      </table>
    </div>
    <input type="button" value="Add Other" id="add_more">
    <script>
        $('#add_more').click(function() {
            cloneMore('div.table:last', 'mypost_set');
         });
    </script>
</form>

在JavaScript文件中:

function cloneMore(selector, type) {
    var newElement = $(selector).clone(true);
    var total = $('#id_' + type + '-TOTAL_FORMS').val();
    newElement.find(':input').each(function() {
        var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
        var id = 'id_' + name;
        $(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');
    });
    newElement.find('label').each(function() {
        var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
        $(this).attr('for', newFor);
    });
    total++;
    $('#id_' + type + '-TOTAL_FORMS').val(total);
    $(selector).after(newElement);
 }

问题是与选择:“原始的HTML代码片段的克隆工作确定”,但是,从克隆的代码片段的克隆选择标记为“不确定”,换句话说,那我会克隆表中的第二次选择犯规工作了那些克隆项目。

问题只用于IE。

什么即时通讯失踪? 任何暗示是apreciated :)

Answer 1:

这是一个众所周知的jQuery的错误 ,但他们声称它是固定的。
这里的一个选择是使用.html()并手动复制它们。 这不会复制事件和保存.data ,这可能是你的问题。 .live可以帮助,如果你有要事在这里。

如果你唯一需要的是改变名称和ID,更好的选择是使用正则表达式(此克隆事件,从第一个元素,你介意):

var name = $(this).attr('name').replace(/-\d+-/,'-' + total + '-');

这将搜索-number- ,并更换它,所以它发现在所有浏览器的最后一个号码,或-0-的IE浏览器。

下面是使用警报工作演示: http://jsbin.com/evapu

作为一个侧面说明 - 你的代码是有点乱。 jQuery代码应该是里面$(document).ready (点击),你有一个表没有身体(无<tr> <td> -输入被抛出),代码有一些重复。
虽然它并没有在这种情况下帮助的,无效的DOM并没有使用ready的事件可能会导致问题。



Answer 2:

你缺少ID为“ID_” +型+隐藏输入“-TOTAL_FORMS” - 你从这个对象让你的总并用它来修改名字,然后克隆对象的ID。

我想你的代码如下:

<input type="hidden" id="id_mypost_set-TOTAL_FORMS" value="1"/>

之后加入

<form method="post" action="/post/add/">

它正常工作,所有新投入有正确的ID。 这是否真的在FF工作吗?



Answer 3:

你的代码完美的作品在所有浏览器像以前还有,如果你能代替指出:

var newElement = $(selector).clone(true);

有:

var newElement = $($(selector).html());

并看看是否有帮助。

此外,重新附加事件处理程序,就像这样。

newElement.bind(EVENT, function() {});

或者使用适当的辅助。



Answer 4:

也许你可以使用此复制功能:

/*
 * Clone method
 * Prevents reference problem
 */
clone: function( obj ){
  if(obj == null || typeof(obj) != 'object')
    return obj;
  var temp = new obj.constructor();
  for(var key in obj)
    temp[key] = clone(obj[key]);
  return temp;
}


文章来源: Problem using jQuery clone function in form