我有一个复选框,表示用户想吃晚饭。在此复选框下面是几个单选按钮,用户可以从中选择他/她的晚餐选项。我正在寻找两件事情......
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');
})
如果用户取消选择晚餐,我无法确定为什么不取消选择晚餐选项。一个事件取消了另一个吗?有什么想法吗?
答案 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
}
});