Radio Buttons 和 .attr('checked','checked') 在IE7中不起作用。

15

有没有办法在IE7中添加后获取单选按钮的选中状态?

看起来在所有浏览器中都有效的方法,在IE6、7中似乎并不起作用,尽管我已经在很多地方读到我是正确做法。我完全不知道为什么它不起作用。

var $itemVariantRowRadio = $("<input/>")
    .attr("type", "radio")
    .attr("name", "itemvariant")
    .addClass("itemvariant")
    .val('whatever');


    $itemVariantRowRadio.attr('checked', 'checked');
    $itemVariantRow.append($itemVariantRowRadio)

现在如果我在IE6/7中执行console.log($itemVariantRowRadio.attr('checked')),它会显示为TRUE但实际上单选按钮并没有被选中或者设置为选中状态。

真是太可怕了!是否有其他人遇到过这个问题并且有任何解决方案?

4个回答

37

如果使用的是 jQuery >= 1.6:

请使用如下方式的 prop:参见此处:.prop() vs .attr()

$itemVariantRowRadio.prop('checked', true);
如果使用 jQuery 版本低于1.6:
$itemVariantRowRadio.attr('checked', true);

另外:

试着像这样创建你的元素:

var $itemVariantRowRadio = $("<input/>",{
     type: 'radio',
     name: 'itemvariant',
     class: 'itemvariant',
     checked: true,
     value: 'whatever'
});
$itemVariantRow.append($itemVariantRowRadio);

请查看 fiddle: http://jsfiddle.net/maniator/6CDf3/
一个示例添加了 2 个输入框:http://jsfiddle.net/maniator/6CDf3/2/


哇,1.6版本是什么时候发布的?现在又有了1.6.1...肯定有更好的解决方案吧。我的意思是,在1.6之前肯定没有这个问题 :D - Intellix
@Neal - 我认为在所有的jQuery版本中都应该使用.attr() - 这些是在插入到DOM之前设置的初始属性。 - Alnitak
@Alnitak -- 我没有意识到 OP 正在做什么,但是不,即使在 dom 中之前,你应该使用 prop 来设置 checked - Naftali
谢谢你提出了创建元素的建议,这应该会帮助我很多。而且你还让我认识了 Fiddle :D - Intellix
@Dominic,没问题 ^_^ 随时欢迎。 - Naftali
显示剩余3条评论

4
尝试一下:$itemVariantRowRadio.not(':checked').click().change(); 这样,实际上您会像使用鼠标一样单击复选框。not(':checked')可以确保在此之前未被选中。然后触发更改事件,因为jQuery的click本身不会执行该操作。

2

1
这似乎真的解决了它 :) - Intellix

0

如果将checked属性附加到dom后,您无需触发点击事件:http://jsfiddle.net/XjHUe/2/

<div id='content'></div>
var $itemVariantRowRadio = $("<input/>")
    .attr("type", "radio")
    .attr("name", "itemvariant")
    .addClass("itemvariant")
    .val('whatever');
//$itemVariantRowRadio.attr("checked", true);
$("#content").append($itemVariantRowRadio);
$(".itemvariant").attr('checked',true);

var val = $(".itemvariant").attr("checked");
alert(val);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接