我有一个奇怪的错误,这是我的代码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请让我改变知道
你可以发布html代码,我想你可能在那里犯了一个错误。 – Val
你有没有在IE开发工具中检查会发生什么?我发现旧版IE浏览器在将jQuery创建的元素插入DOM时非常挑剔,因为它认为它们“无效”。 – m90
请参阅编辑 – Anders