多个单选按钮,一个选中

时间:2013-08-03 19:25:50

标签: javascript jquery html radio-button

标题可能有点模糊。所以让我解释一下。

我有一个页面,用户可以选择他们想要约会的日期。但是,我们今天给他们多种选择,因为第一选择是完整的

单选按钮HTML:

<input type="radio" class="my-radio" value="monday" name="my_form[day][choice1][]"
id="monday1"/>
<label for="monday1">Monday</label>

<input type="radio" class="my-radio" value="tuesday" name="my_form[day][choice1][]"
id="tuesday1"/>
<label for="tuesday1">Tuesday</label>

<input type="radio" class="my-radio" value="wednesday" name="my_form[day][choice1][]"
id="wednesday1"/>
<label for="wednesday1">Wednesday</label>

<input type="radio" class="my-radio" value="thursday" name="my_form[day][choice1][]"
id="thursday1"/>
<label for="thursday1">Thursday</label>

<input type="radio" class="my-radio" value="friday" name="my_form[day][choice1][]"
id="friday1"/>
<label for="friday1">Friday</label>

<input type="radio" class="my-radio" value="saturday" name="my_form[day][choice1][]"
id="saturday1"/>
<label for="saturday1">Saturday</label>

这又重复了两次。虽然,ids被改变,名字也是如此。因此,对于第二个,它将是(星期一); id = monday2,name = my_form [day] [choice2] [],依此类推。

所以说清楚。 3行无线电,所有相同的值,但ID和名称不同。

现在当检查星期一时,在哪一行无关紧要,我想禁用所有其他星期一。现在,如果我选择星期二,则应再次启用所有星期一。

第一部分我使用jQuery;

jQuery('.my-radio').change(function () {
// Get all elements associated to value, but the currently selected radio.
var associates = jQuery('.my-radio[value="' + jQuery(this).val() + '"]').not("#" + jQuery(this).attr('id'));

  // Disable every element that we found
  jQuery(associates).each(function(){
     jQuery(this).prop('disabled', true);
  });
});

现在我唯一的问题是第二部分。重新启用以前禁用的无线电。

一个JSFiddle,使它更清晰; http://jsfiddle.net/Hr9h2/1/

编辑: 非常感谢您的回答。

但是,我忘了提到你不允许选择星期一三次甚至两次。

4 个答案:

答案 0 :(得分:7)

您正在寻找的功能是通过启用所有单选按钮,循环所有选中的单选按钮并禁用任何具有相同值的按钮来创建的。这样就可以使用你想要的多行单选按钮:

$('.my-radio').on('change', function () {
    $('.my-radio').prop('disabled',false).filter(':checked').each(function() {
        $('.my-radio[value="' + this.value + '"]:not(:checked)').prop('disabled', true);
    });
});

FIDDLE

答案 1 :(得分:0)

认为这很简单..只需启用 change事件中的所有单选按钮,然后再禁用特定的单选按钮。

这是JS

jQuery('.my-radio').change(function () {
    jQuery('.my-radio').prop('disabled', false); //<---here
    // Disable all elements associated to value
    var associates = jQuery('.my-radio[value="' + jQuery(this).val() + '"]').not("#" + jQuery(this).attr('id'));
    associates.prop('disabled', true);
});

注意:

您不必使用each循环来获取所有员工。 associate变量已经包含了所有元素。这是一个 fiddle at jsFiddle.net

答案 2 :(得分:0)

对代码进行了一些重构:

$('.my-radio').change(function () {
    //enable all radio buttons
    $(".my-radio").prop("disabled", false);
    // Disable all elements associated to value
    $('.my-radio[value="' + this.value + '"]').not(this).prop('disabled', true);
});

答案 3 :(得分:0)

这可能就是你要找的东西:

$('.my-radio').click(function () {
    // When a radio button is clicked
    $('.my-radio').each(function () {
        // Enables all radios buttons
        $('.my-radio').prop('disabled', false);
    });

    // Disables all radio buttons with same value as this, except this one
    $('input[value="' + $(this).val() + '"]').not(this).prop('disabled', true);

});