【问题标题】:IE7 jQuery .clone and .serializeIE7 jQuery .clone 和 .serialize
【发布时间】:2011-12-24 07:43:45
【问题描述】:

我有一个奇怪的错误,这是我的代码

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

我在此表单中有一些复选框和一些其他输入,如果未选中复选框并且我选中它,则参数字符串将包含该复选框的正确值。但是,如果我想取消选中复选框,则参数字符串将始终为真(复选框最初来自响应的值)...它适用于 Firefox...

编辑:下面的 Rhe 不相关,但我保留它作为历史记录

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

但这是当您进行完整提交时,我正在做一个 ajax 帖子,为了获取表单数据,我做了一个 jquery 序列化表单,在 Firefox 中序列化需要每个输入的第一次出现,这就是它在 Firefox 中工作的原因。 IE7 包括这两者,并且由于复选框的值为 true,modelbinder 将绑定到它。有没有解决这个问题的干净解决方案? 我可以在序列化之前删除所有未选中的复选框,这是最好的方法

edit2:从这里阅读

IE7 中的

form.clone() 将始终返回来自服务器时的 HTML,因此如果从服务器选中该复选框,则在执行 form.clone() 时将选中该复选框。我需要克隆它,因为我使用 ajax 并且无法破坏标记...

edit3:这变得更疯狂了 仅当从服务器选中该复选框时,edit2 才为真,在这种情况下,克隆将始终被选中,如果您未选中则无关紧要...克隆的形式。

编辑:这解决了问题

在 cloneNode 之后,我需要这些行来将旧的 innerHtml 添加到节点
if (jQuery.browser.msie && (jQuery.browser.version

问题在于,改变 jQuery 核心 API 从来都不是一个好的解决方案,它是一个已知的修复,所以出于某种原因 jQuery 团队不想修复它。我试图覆盖 Element 上的 cloneNode 方法并在那里添加代码,在 FF 中工作但在 IE 中没有,我还尝试在 jQuery 中覆盖 clone 方法,这部分工作,但底层克隆代码使用我找不到的方法一种在 jQuery 之外访问的方法....

如果有人有一种在不改变实际 api 的情况下将上述代码行添加到 jQuery 的好方法,请告诉我

【问题讨论】:

  • 你能把html代码贴出来吗,我想,你可能在那里弄​​错了。
  • 你检查过 IE 开发工具会发生什么吗?我发现旧版本的 IE 在将 jQuery 创建的元素插入 DOM 时非常挑剔,因为它认为它们“无效”。

标签: jquery forms asp.net-mvc-3 serialization internet-explorer-7


【解决方案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 对内部/外部 HTML 有一些已知问题。

【讨论】:

  • 是的,我昨天发现了一个,但 id 没有帮助,我必须更改 jQuery 核心才能让它工作,但这不是一个可靠的解决方案,所以我必须找到其他东西,我试图在元素级别覆盖 cloneNode 方法,没有用。请参阅我的代码编辑
猜你喜欢
  • 2012-09-25
  • 2012-01-05
  • 2011-05-01
  • 2012-09-10
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多