Javascript innerHTML忽略IE8中复选框和单选输入的DOM更改

Javascript innerHTML忽略IE8中复选框和单选输入的DOM更改,javascript,jquery,html,dom,innerhtml,Javascript,Jquery,Html,Dom,Innerhtml,我想获取表单元素的更新DOM html字符串(例如,,,,) 我发现了这个问题,并尝试使用gnarf编写的formhtml插件: 问题是它在Firefox和Chrome中都能工作,但在IE8中只能部分工作(我还没有测试过其他版本) 如果您在IE8中打开以下页面,您可以看到一个文本框、一些复选框和收音机。尝试输入一些文本并选中复选框和收音机 然后单击“单击”按钮 您可以看到,无论我是通过原生DOM对象的innerHTML属性检索html字符串,还是使用插件的formhtml()函数检索html

我想获取表单元素的更新DOM html字符串(例如,

我发现了这个问题,并尝试使用gnarf编写的
formhtml
插件:

问题是它在Firefox和Chrome中都能工作,但在IE8中只能部分工作(我还没有测试过其他版本)

如果您在IE8中打开以下页面,您可以看到一个文本框、一些复选框和收音机。尝试输入一些文本并选中复选框和收音机

然后单击“单击”按钮

您可以看到,无论我是通过原生DOM对象的
innerHTML
属性检索html字符串,还是使用插件的
formhtml()
函数检索html字符串。返回的html仅反映文本框的
属性中的更改,您永远无法在
中看到
checked=“checked”
属性,即使您在单击按钮之前已经选中了它们

为什么会发生这种情况,以及我如何使其在IE中工作

提前谢谢

编辑: 我很抱歉。我的问题犯了一些错误,现在已经重写了

编辑: 创建示例代码是为了演示我的问题,但我犯了一些错误。IE7和IE8都给出了预期的结果(我也再次进行了测试)

在我的原始代码中,我没有直接在
$('#div1')
上使用
formhtml()
函数,而是在使用
formhtml()
之前将其克隆如下:

警报($('div1').clone().formhtml())

在IE8和jQuery 1.3.2上,返回的html并不反映那些复选框和收音机的选中状态,我从来没有想到这会是
clone()
函数的问题,这就是为什么在创建示例代码时,我没有克隆它,所以实际的问题没有得到演示

更新后的示例代码如下(jQuery版本更改为1.3.2):

这可能会显示IE8上clone()函数的问题(我现在没有IE8,我在家时会测试它,稍后会报告)

编辑:

我刚刚做了测试。这实际上是IE8上jQuery1.3.2中的
clone()
函数的问题。它无法复制复选框和收音机的状态。将其更改为jQuery 1.5.1后。它工作得很好。

我在IE8和IE7上尝试了测试用例,它们对我有效

复制问题的步骤:

  • 在IE浏览器中加载
  • 在文本字段中输入文本,选中第一个单选按钮,选中第一个复选框
  • 按“单击”按钮
  • 预期结果:

    这两个警报在文本字段上显示值,在第一个收音机和第一个复选框上显示“已选中”状态

    实际结果:

    正如所料。但是,请记住,IE对DOM的表示意味着
    checked=“checked”
    实际上被报告为
    checked
    ,但这是正确的

    更新:

    添加了一个测试,以确保选中状态可以复制到新的dom节点:

    $('#btn1').click(function() {
        alert($('#div1').formhtml());
        alert(document.getElementById('div1').innerHTML);
    
        var div1 = $('#div1');
        div1.clone().insertAfter(div1);
    });
    
    这将创建另一组保留原始输入状态的字段。 .

    我在IE8和IE7上尝试了测试用例,它们为我工作

    复制问题的步骤:

  • 在IE浏览器中加载
  • 在文本字段中输入文本,选中第一个单选按钮,选中第一个复选框
  • 按“单击”按钮
  • 预期结果:

    这两个警报在文本字段上显示值,在第一个收音机和第一个复选框上显示“已选中”状态

    实际结果:

    正如所料。但是,请记住,IE对DOM的表示意味着
    checked=“checked”
    实际上被报告为
    checked
    ,但这是正确的

    更新:

    添加了一个测试,以确保选中状态可以复制到新的dom节点:

    $('#btn1').click(function() {
        alert($('#div1').formhtml());
        alert(document.getElementById('div1').innerHTML);
    
        var div1 = $('#div1');
        div1.clone().insertAfter(div1);
    });
    
    这将创建另一组保留原始输入状态的字段。
    .

    非常感谢您的回答。我现在可以确认它显示了IE7和IE8的预期结果。问题可能不在于
    formhtml()
    函数,而在于
    clone()
    函数,它没有出现在我的示例代码中。“很抱歉。”波波很高兴这有帮助。请记住,克隆人在这里并没有做任何新的事情——这只是确认formhtml工作的另一种方式。非常感谢您的回答。我现在可以确认它显示了IE7和IE8的预期结果。问题可能不在于
    formhtml()
    函数,而在于
    clone()
    函数,它没有出现在我的示例代码中。“很抱歉。”波波很高兴这有帮助。请记住,克隆在这里并没有做任何新的事情——这只是确认formhtml工作正常的另一种方式。