Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在表单中使用jQuery克隆函数时出现问题_Javascript_Jquery_Html_Django_Jquery Selectors - Fatal编程技术网

Javascript 在表单中使用jQuery克隆函数时出现问题

Javascript 在表单中使用jQuery克隆函数时出现问题,javascript,jquery,html,django,jquery-selectors,Javascript,Jquery,Html,Django,Jquery Selectors,您将要检查的这些代码片段对于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-ti

您将要检查的这些代码片段对于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>
问题在于选择器:“原始html代码段的克隆可以正常工作”,但是,克隆代码段的克隆会将选择器标记为“未定义”,换句话说,在我第二次克隆表时,选择器对这些克隆项不再起作用

问题只针对IE


我错过了什么?任何提示都值得注意:)

也许您可以使用此克隆功能:

/*
 * 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;
}
这是一个错误,尽管他们声称它是固定的。
这里的一个选项是使用
.html()
,并手动克隆它们。这不会克隆事件并保存
.data
,这可能是您的问题
.live
可以帮助您处理这里的事件

如果您只需要更改名称和id,那么更好的选择是使用正则表达式(请注意,这将从第一个元素克隆事件):

这将搜索并替换
-number-
,以便在所有浏览器上找到最后一个数字,或在IE上找到
-0-

下面是一个带有警报的工作演示:

顺便说一下,您的代码有点凌乱。jQuery代码应该在
$(文档)中。就绪
(单击),您有一个没有正文的表(没有
-输入被抛出),并且代码有一些重复。

虽然在这种情况下没有帮助,但是无效的DOM和不使用
ready
事件可能会导致问题。

如前所述,您的代码可以在所有浏览器上完美工作 但如果您可以替换:

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

看看是否有帮助

另外,重新附加事件处理程序,如下所示

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

或者使用适当的帮助程序。

您缺少一个id为'id\u'+type+'-TOTAL\u FORMS'的隐藏输入 -您将从此对象获取总计,并使用它修改克隆对象的名称和id

我用以下代码尝试了您的代码:

紧接着添加

它工作正常,所有新输入都有正确的ID。
这在FF中真的有效吗?

为什么不在选择器中始终使用:first而不是:last来克隆原始表单?它的:last部分很重要,因为选择器还用于确定新表单将插入的内容。但我已经做过这样的测试,没有结果,现在所有浏览器都有同样的行为:(正如在IE6、8、8对7兼容模式和Firefox上发布的那样,您的代码运行良好:。当然,缺少一些控件,但代码可以正常工作。thx对于测试,克隆可以正常工作,但在内部,选择器不能正常工作。如果可以,请使用首选语言在服务器上执行此操作,从该表单中获取POST o get,然后告诉我您看到了什么=)谢谢,但是,我该如何使用这个函数呢?拥有count my context?没有帮助,它不会附加事件处理程序:(是的,偶数处理程序,你必须重新附加这些:)看看这个新的编辑帮助Shi Kobi,首先:谢谢4了解我,我接受你的所有建议(备注)修复了凌乱的代码,并将其应用到我的代码中,会导致以下错误:$(选择器)。在(newElement)之后;节点无法插入层次结构中的指定点“code:”3,元素被克隆,但当JS运行此行时,返回此错误并删除克隆的项。OMG,如果我删除$(选择器)。在(newElement)之后;行,它现在在IE中运行良好,为什么是Kobi?很乐意提供帮助。我发布的版本有点不同,但我想你已经明白了。谢谢!
var newElement = $(selector).clone(true);
var newElement = $($(selector).html());
newElement.bind(EVENT, function() {});