【问题标题】:Is there a bug with radio buttons in jQuery 1.9.1?jQuery 1.9.1 中的单选按钮是否存在错误?
【发布时间】:2013-03-28 12:19:13
【问题描述】:

我一直在尝试使用 jQuery 以编程方式选择单选按钮,我认为这就像更改选中的属性一样简单。

但是,以下代码似乎并没有在 Chrome/Firefox 中执行 jQuery 1.9.1 中的预期。

预期行为:单击包含单选按钮的 div -> 'checked' 属性被设置 -> 在 DOM 中呈现选中状态。

实际行为:单击包含单选按钮的 div -> 'checked' 属性被设置 -> 在 DOM 中呈现选中的第一个和第二个按钮单击,后续按钮不会呈现为检查。

jQuery:

$('div.form-type-radio').on('click', function () {    
    var Id = $(this).find('input[type=radio]').attr('id');   
    $('form input[type=radio]:not(#'+Id+')').removeAttr('checked');   
    $('#' + Id).attr('checked', 'checked');    
    console.log($('#' + Id));    
});

这是一个 jsFiddle - http://jsfiddle.net/GL9gC/

我已经用以前版本的 jQuery 尝试了相同的代码,它都按预期工作。

【问题讨论】:

  • 并不是说它与此有任何关系,但是为什么你会得到元素,然后是 ID,下面的几行再次使用 ID 来获取元素? (not 也适用于元素)。你的整个函数可能只是$('input[type=radio]', this).prop('checked', true);
  • 这只是一些头疼和调试留下的,只是绝对确定我有 ID。

标签: javascript jquery debugging jquery-selectors


【解决方案1】:

在这种情况下,您应该使用prop() 而不是attr()/removeAttr()

这是一个有效的jsFiddle

jQuery:

$('div.form-type-radio').on('click', function () {
    var Id = $(this).find('input[type=radio]').prop('id');
    $('form input[type=radio]:not(#'+Id+')').prop('checked');
    $('#' + Id).prop('checked', 'checked');
    console.log($('#' + Id));
});

【讨论】:

  • 谢谢你,我想我应该读过这个(jQuery docs)::“尽管如此,关于 checked 属性最重要的概念是它不对应于 checked 属性。属性实际上对应的是defaultChecked属性,应该只用来设置checkbox的初始值,checked属性值不随checkbox的状态而变化,而checked属性是这样的。因此,跨浏览器兼容的方式确定是否选中复选框是使用属性"
  • 我疯了,因为我不明白为什么 attr 不适用于使用 2.1.4 的项目。很高兴知道。
【解决方案2】:

LIVE DEMO

$('div.form-type-radio').on('click', function () {    
    $(this).find(':radio').prop({checked: true});
});

http://api.jquery.com/prop/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多