1

クロムコンソールからの出力

z = selected_sheet()

戻り値

5 
undefined

...

戻り値

undefined

JavaScript コード

function selected_sheet(){
        $('.sheet_radio').each( function(){
            if (this.checked == true){
                var x = 5;
                console.log(x);
                return x;
            };
        });
    };

したがって、コンソール ログから正しい出力が得られますが、z は console.log から返された同じ項目に設定されません。

4

2 に答える 2

1

これは、一度に 1 つのラジオ ボタンしか選択できないためです。これについては後ほど詳しく説明します。

だからここにあなたのコードがあります:

function selected_sheet(){
        $('.sheet_radio').each( function(){
            if (this.checked == true){ `Entry Point`
                var x = 5;
                console.log(x);
                return x;
            };
        });
    };

ラジオ ボタンが選択されている場合、コントロールは if 条件に入り、Entry Point出力は 5 になります。

Entry Pointただし、ラジオ ボタンが選択されていない場合、if 条件が失敗し、関数が未定義を返すため、コントロールは通過しません。

ご不明な点がございましたら、お知らせください。

于 2013-07-17T04:24:06.800 に答える
1

問題

これは、.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;
}
于 2013-07-17T05:46:06.150 に答える