1

私は Jquery/Javascript プログラミングの初心者なので、優しくしてください ;)

以下の関数は、特定のグループのラジオボタンが選択されているかどうかを確認します。しかし、私は得ることができません:

var checkifonechecked = true;

if ステートメントに渡されます。Uncaught ReferenceError を返します: checkifonechecked が定義されていません。この変数を渡すにはどうすればよいですか?

function stap3() {
$('input[name=ostap2]').each(function() {
    if (this.checked) {
        var checkifonechecked = true;
    }
});
if(checkifonechecked){  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen'); }
} 

ご協力ありがとうございました。

4

5 に答える 5

4

実際にチェックされている数を確認するだけです。each ステートメントや変数は本当に必要ありません

function stap3() {
   if($('input[name=ostap2]:checked').length){  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen'); 
    }
} 
于 2013-01-25T15:51:26.597 に答える
3

あなたの問題は、checkifonechecked変数を無名関数 (AKA ラムダ) 内で宣言しているためです。匿名関数が終了すると、変数は存在しなくなるため、stap3関数で使用しようとすると、説明したように「Uncaught ReferenceError」で失敗します。

stap3次のように、実行が保証されている場所 (関数の先頭など) で変数を宣言する必要があります。

function stap3() {
    // DECLARE your variable outside the anonymous function.
    var checkifonechecked = false;

    $('input[name=ostap2]').each(function()  // This is the anonymous function.
    {
        if (this.checked) {
            // ASSIGN a value to your variable.
            checkifonechecked = true;
        }
    });

    if(checkifonechecked)
    {  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } 
    else
    {
        alert('neen'); 
    }
} 
于 2013-01-25T15:50:20.407 に答える
1

別のスコープで宣言されている変数をチェックしています。より高いスコープで変数を宣言する必要があります。

function stap3() {
    var checkifonechecked = false;
    $('input[name=ostap2]').each(function () {
        if (this.checked) checkifonechecked = true;
    });

    if (checkifonechecked) {
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen');
    }
}
于 2013-01-25T15:50:32.440 に答える
1

問題は checkifonechecked のスコープです。stap3 関数に移動する必要があります。

function stap3() {
    var checkifonechecked = false;
    $('input[name=ostap2]').each(function () {
        if (this.checked) {
            checkifonechecked = true;
        }
    });

    if (checkifonechecked) {
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen');
    }
}
于 2013-01-25T15:52:22.577 に答える
0

また、変数をグローバルとして定義した場合は、HTML 部分 (フォームを含むセクション) を投稿できますか? (var checkifonechecked = true) を繰り返さないでください (checkifonechecked = true)。

ここで、リソースを節約するために、選択したチェックボックスが見つかったらループを中断します。選択したチェックボックスが見つかった場合、他のチェックボックスを表示する必要はありません。

于 2013-01-25T15:54:31.810 に答える