問題
これは、.eachによって実行される関数がその関数のスコープからのみ返されるために発生します。selected_sheetからは戻りません。
実際、各明示的に渡された関数が値を返すように明示的に作成すると、z が実際には設定されないことがわかります。
function selected_sheet() {
$('.sheet_radio').each(function() {
return 5;
});
// nothing is actually being returned
};
z = selected_sheet(); // z is undefined
解決
1 つの解決策は、外側のスコープで 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;
};
もう 1 つの方法は、セレクターを使用してクエリを実行し、チェックされているラジオ ボタンがあるかどうかを確認することです。
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;
}