0

当我选择现有单选按钮之一时,我需要选择具有类似 unique_id 的单选按钮。这是代码:

$('.test li input:radio').change(function () {

    var unique_id = $(this).attr('unique_id');
    $('input:radio').each(function () {

        if ($(this).attr('unique_id') == unique_id) {
            $(this).attr('checked', true);
        } else {
            $(this).attr('checked', false);
        }

    });
});

小提琴

在谷歌浏览器中它正在工作,但并非总是如此。它可能有效,也可能无效。尝试多次选择收音机。在 Mozilla 中它根本不起作用。我是什么做的?

4

2 回答 2

0

$('.test li input[type="radio"]').change(function(evt){

var other_el= $('.test li input[type="radio"][unique_id="' + $(evt.target).attr('unique_id') + '"]').not($(evt.target));


if (other_el.length === 1){
    other_el.attr('checked', $(evt.target).has(':checked')); 
}

});

这是一个链接:http: //jsfiddle.net/Sj4Ah/1/

享受!

于 2013-08-06T13:22:22.837 回答
0
$('.test li input:radio').change(function(){
    $('input[unique_id="'+$(this).attr('unique_id')+'"]').prop('checked', true);
});

小提琴

当检查另一个具有相同属性的收音机时,浏览器会自动取消检查无线电输入name,因此,只要您的所有无线电组都具有与unique_id您不必手动执行的相同项目。此外,该change事件仅在选中时触发无线电输入,因此您只需在更改时检查具有相同unique_id属性的所有无线电以保持组同步。


至于为什么您的原始代码在 Firefox 中不起作用,您应该使用.prop()设置checked属性。避免使用.attr()设置 DOM 元素属性。现在使用.prop(). _ 除此之外,我找不到任何逻辑错误,尽管可以进一步简化checked使用 vanilla JS 设置属性:

$('.test li input:radio').change(function(){
    var unique_id = $(this).attr('unique_id');
    $('input:radio').each(function(){
        this.checked = $(this).attr('unique_id') == unique_id;
    });
});

小提琴


这个问题已经在CodersClan上得到了答案。

于 2013-08-07T00:30:55.693 回答