jQuery - 选项按钮重置已取消

时间:2011-09-23 05:42:50

标签: jquery checkbox radio-button

我有一个复选框,表示用户想吃晚饭。在此复选框下面是几个单选按钮,用户可以从中选择他/她的晚餐选项。我正在寻找两件事情......

1)每当用户“检查”他们想吃晚餐时,我都会选择默认的晚餐选择选项。当用户“取消检查”晚餐选项时,我希望取消选择所有晚餐选择。所有这一切都正常,直到我尝试添加一个额外的jQuery选项。

2)如果用户选择晚餐选项,我想要一个复选框,表示用户想要检查晚餐。最后一个选项似乎否定了第一个选项。

我在这里创建了一个jsfiddle.net示例... http://jsfiddle.net/ScEw2/1/

我还在这里粘贴了代码......

HTML

<p><input type="checkbox" id="IsHavingDinner" name="Dinner" /> Do you want dinner?</p>
<hr />
<input type="radio" id="DinnerChoiceChicken" name="DinnerChoice" value="Chicken"> Chicken<br/>
<input type="radio" id="DinnerChoiceFish" name="DinnerChoice" value="Fish"> Fish<br/>
<input type="radio" id="DinnerChoiceSteak" name="DinnerChoice" value="Steak"> Steak<br/>
<input type="radio" id="DinnerChoiceVegan" name="DinnerChoice" value="Vegan"> Vegan<br/>

jQuery代码

// Select default dinner option otherwise deselect all options
$('#IsHavingDinner').click(function(event) {
    if ($('#IsHavingDinner').attr('checked')) {
        // Select Dinner Choice Chicken by default
        $('#DinnerChoiceChicken').attr('checked', 'checked');
    } else {
        // Deselect all Dinner Choices
        $('input[name="DinnerChoice"]').attr('checked', false);
    }
})

// If a dinner choice is selected, make sure the checkbox
// indicating they want dinner is selected
$('[name="DinnerChoice"]').click(function(event) {
    $('#IsHavingDinner').attr('checked', 'checked');
})

如果用户取消选择晚餐,我无法确定为什么不取消选择晚餐选项。一个事件取消了另一个吗?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用JQuery的.change()事件代替click()。在复选框更改之前执行click()

$('#IsHavingDinner').change(function(event) { ..

在JQuery 1.6 +中也使用prop()而不是attr()

答案 1 :(得分:1)

// Select default dinner option otherwise deselect all options
// Listen for a change event on the having dinner checkbox
$('#IsHavingDinner').change(function(){
    if($(this).is(':checked')){ // if checked
        $('#DinnerChoiceChicken').prop('checked', true); // check a default dinner choice
    } else {
        $('input[name="DinnerChoice"]').prop('checked', false); // otherwise, uncheck all
    }
});

// If a dinner choice is selected, make sure the checkbox 
// indicating they want dinner is selected
$('input[name="DinnerChoice"]').change(function(){
    if($(this).is(':checked')){ // if checked
        $('#IsHavingDinner').prop('checked', true); // check having dinner
    }
});