Javascript 在表单中使用jQuery克隆函数时出现问题
您将要检查的这些代码片段对于FF、Chrome、Safari都可以正常工作,但在运行jQuery克隆功能时,IE似乎有问题: 我的模板: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
<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() {});