2

私はまだJavaScriptにかなり慣れていないので、どこで間違いを犯しているのかわかりません。私が取り組んでいる基本的なセットアップは、一連のラジオ ボタンと一連のチェック ボックスです。選択したラジオ ボタンに応じて、特定のチェック ボックス セットのみを使用できるようにする必要があります。残りは無効にするかグレー表示にする必要があります。特定のラジオ ボタンで許可されるチェック ボックスは、php 配列を介して渡されます。私のコードでは、排他的な選択肢はラジオ ボタンを参照し、拡張された選択肢はチェック ボックスを参照します。この機能のための私の JavaScript と php は次のとおりです。

window.onload = function(){
    <?php
    for($i = 0; $i < count($students_information); $i++){
        foreach($exclusive_extended_array as $exclusive => $extended){
            echo "$('".$i."_exclusive_".$exclusive."').onclick = allow(".$i.",".json_encode($extended).");";
        }
    }
    ?>
}
function allow(i, extended){
    $('[id^="'+i+'Extended"]').disabled = true;
    for (var j = 0; j < extended.length; j++) {
        alert(extended[j]);
        $(i+"Extended"+extended[j]).disabled = false;
    }
}

読み込まれたページでは、次のように表示されます。

<script type="text/javascript">
window.onload = function(){
    $('0_exclusive_2176').onclick = allow(0,[1975]);
    $('0_exclusive_911').onclick = allow(0,[]);
    $('0_exclusive_795').onclick = allow(0,[1973,1975]);
}
function allow(i, extended){
    $('[id^="'+i+'Extended"]').disabled = true;
    for (var j = 0; j < extended.length; j++) {
        alert(extended[j]);
        $(i+"Extended"+extended[j]).disabled = false;
    }
}
</script>

残念ながら、コードが最終的に行うことは、ラジオ ボタンの 1 つがチェックされたときではなく、ページが読み込まれたときにスクリプトを実行することです。要素の名前に問題があるとは思いません (ただし、命名スタイルが一貫していないことは認識していますが、それを完全に制御することはできません)。コードで単純な間違いを犯したのは私だけだと思いますが、まだそれをキャッチするのに十分なJavaScriptの経験がありません。誰かが私が間違っていることを見ていますか?

お時間をいただきありがとうございます!

4

1 に答える 1

6

次のようにクリックハンドラーを割り当てています。

$('0_exclusive_2176').onclick = allow(0,[1975]);

何が起こっているのか:allowが実行され、その戻り値(undefined)がイベントとして設定されます。関数に設定する必要がありonclickます:

$('0_exclusive_2176').onclick = function(){
    allow(0,[1975]);
};

allowreturnを関数にすることもできます。

function allow(i, extended){
    return function(){
        $('[id^="'+i+'Extended"]').disabled = true;
        for (var j = 0; j < extended.length; j++) {
            alert(extended[j]);
            $(i+"Extended"+extended[j]).disabled = false;
        }
    };
}

これ$('0_exclusive_2176').onclick = allow(0,[1975]);で、期待どおりに機能するはずです。

于 2012-05-04T15:54:08.740 に答える