IE输入无线电值始终返回' on'而不是值集

时间:2012-11-08 10:14:09

标签: javascript forms internet-explorer

我正在动态创建表单并附加元素:

var input = document.createElement('input');
input.name = extension_id + '[]';
input.value = value.id;
input.className = 'changeable';
input.type = 'radio';
input.checked = true;
wrapper_div.appendChild(input);

作为HTML制作的示例(来自Chrome):

<input name="2[]" class="changeable" type="radio" value="5">

在Chrome和Firefox中,javascript:

document.getElementsByName("2[]")[0].value

按预期返回'5',但在IE(我测试中的IE9)中,它返回'on'。

是否有某些原因导致IE忽略了值集,而是返回检查状态?

1 个答案:

答案 0 :(得分:3)

基本上,它不是一个被忽略的值的问题,因为IE将元素视为对象 - 一个单选按钮,并将其初始化为此。

如果打开调试器并单步执行代码,则可以看到值5确实已设置。当你到达设置输入类型的行时,即input.type='radio'你可以看到这个值从5变为'on'。当它知道输入确实是一个单选按钮时,把它想象成IE调用一个单选按钮的构造函数。

修复?

在这种情况下足够简单,只需更改语句的顺序即可。对!就那么简单。设置类型,然后设置值。

这在IE9和Chrome中都可以。

{
    var extension_id = 2;
    var input = document.createElement('input');
    input.name = extension_id + '[]';
    input.type = 'radio';
    input.checked = true;
    input.value = 5;
    input.className = 'changeable';
    document.body.appendChild(input);

    alert(input.value);
}

哦,在我忘记之前 - 你可以用IE在IE中打开调试器。 - 关于如何使用它的视频很多。 :)