问题
发生这种情况是因为.each执行的函数仅从该函数的范围返回。它不会从selected_sheet返回。
事实上,如果你明确地让传递给每个明确地返回一个值的函数,你会注意到 z 实际上从未设置:
function selected_sheet() {
$('.sheet_radio').each(function() {
return 5;
});
// nothing is actually being returned
};
z = selected_sheet(); // z is undefined
解决方案
一种解决方案是在外部范围内为 x 设置默认值(或不定义),然后在选中单选按钮时将 x 的值设置为新值
function selected_sheet() {
var x = 7; // set default to 7
$('.sheet_radio').each(function() {
if (this.checked == true) {
x = 5; // set to new value
console.log(x);
return false; // stop iterating
}
});
return x;
};
另一种方法是使用选择器查询是否有选中的单选按钮:
function selected_sheet() {
if($('.sheet_radio:checked').length > 0) {
return 5;
} else {
return 7; // this is the default if nothing is checked
}
}
最后,这是一个纯 JavaScript 解决方案:
function selected_sheet() {
if( document.querySelector('.sheet_radio:checked') !== null) {
return 5;
} else {
return 7; // this is the default if nothing is checked
}
}
和一个简洁的版本
function selected_sheet() {
return document.querySelector('.sheet_radio:checked') !== null? 5 : 7;
}