0

我有一个奇怪的错误,这是我的代码IE7的jQuery .clone和.serialize

var form = $("form").clone(); 
hiddenNodes.clone().appendTo(form); 
parameters = form.serialize(); 

我有这种形式的一些复选框和其他一些投入,如果没有选中复选框,我检查,参数字符串将包含该复选框的正确值。但是,如果我想取消选中复选框,参数字符串将始终为真(复选框最初来自响应的值)...它可以在Firefox中使用...

编辑:Rhe below不相关,但I保持它的历史

我使用MVC3和MVC3呈现两个输入复选框,一个复选框和一个隐藏,这是因为当您提交表单时,它只提交选中的框。隐藏字段的值始终为false,因此在勾选复选框时,您将获得两个具有相同名称的输入(第一个值为true,另一个值为false),但MVC模型绑定器仅占用第一个输入。当复选框未选中时,它只会发送值为false的隐藏字段,并且绑定器将绑定到该字段。

但是,这是当你正在做全面提交,即时通讯做一个Ajax后,获取表单数据,我做了一个jQuery序列化表单,在Firefox序列化首次出现的每个输入,这就是为什么它在Firefox中工作。 IE7包括这两个,并且由于该复选框的值为true,所以modelbinder将绑定到该..有没有干净的解决方案呢? 我可以serializaing之前删除所有未选中的复选框,是最好的办法

EDIT2:从这里阅读

form.clone()在IE7将始终返回HTML,因为它看起来,当它从来到服务器,所以如果从服务器检查复选框,它将在您执行form.clone()时进行检查。我需要,因为我使用Ajax和不能破坏的标记,克隆它...

EDIT3:这得到疯狂 当复选框被从服务器检查,在这种情况下,克隆永远是EDIT2是唯一的真选中无关紧要,如果你没有选中...但是如果从服务器取消选中复选框,并检查它,你会得到一个克隆形式的复选框。

编辑:这能解决问题

cloneNode后,我需要有这些行老的innerHTML添加到节点
如果(jQuery.browser.msie & &(jQuery.browser.version < = 7)) clone.innerHTML = elem.innerHTML;

问题是,改变jQuery核心API永远不是一个很好的解决方案,它是一个已知的修补程序,所以出于某种原因,jQuery团队不想修复它。我试图覆盖元素的cloneNode方法,并在那里添加代码,在FF中工作,但不在IE中,我也尝试覆盖jQuery中部分工作的克隆方法,但底层克隆代码使用了我找不到的方法一种方法来访问的jQuery之外....

如果任何人有加入以上的代码行jQuery的一个很好的方式,而不在实际API请让我改变知道

+0

你可以发布html代码,我想你可能在那里犯了一个错误。 – Val

+0

你有没有在IE开发工具中检查会发生什么?我发现旧版IE浏览器在将jQuery创建的元素插入DOM时非常挑剔,因为它认为它们“无效”。 – m90

+0

请参阅编辑 – Anders

回答

1

http://bugs.jquery.com/ticket/6486显示有关错误报告的一些信息上话题。

您也可以尝试添加以下代码,并确保它在应用.clone之前运行:

document.getElementById('id').onclick = function() { 
    var broken = document.getElementById('id'); 
    if (broken.checked) broken.setAttribute('checked','checked'); 
    else broken.removeAttribute('checked'); 
}; 

它可能工作,因为IE浏览器有一定的了解与inner-/outerHTML的问题。

+0

是的,我发现一个昨天但ID没有帮助,我不得不在jQuery核心中更改它的工作,但这不是一个负责任的解决方案,所以我必须找到其他的东西,我试图覆盖在元素级别的cloneNode方法,没有工作..请参阅我的代码编辑 – Anders