标题可能有点模糊。所以让我解释一下。
我有一个页面,用户可以选择他们想要约会的日期。但是,我们今天给他们多种选择,因为第一选择是完整的
单选按钮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/
编辑: 非常感谢您的回答。
但是,我忘了提到你不允许选择星期一三次甚至两次。
答案 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);
});
});
答案 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);
});