2012-05-04 9 views
2

私はまだかなり新しいJavaScriptですが、私は自分のミスをどこにしているのか分かりません。私が作業している基本的なセットアップは、一連のラジオボタンと一連のチェックボックスです。選択されたラジオボタンに応じて、チェックボックスの特定のセットのみが使用可能になり、残りは無効/グレー表示にする必要があります。任意のラジオボタンに対して許可されるチェックボックスは、PHP配列を介して渡されます。私のコードでは、排他的な選択肢はラジオボタンを参照し、拡張された選択肢はチェックボックスを参照します。次のように、この機能のための私のJavaScriptとPHPは次のとおりです。ときではなく、ページのロード残念ながら、どのようなコードがやって終わることは、スクリプトを実行しているJavascript - Onclickイベントは、ページロード中のみに発生します。

<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> 

ロードされたページで
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; 
    } 
} 

それはとして表示されますラジオボタンの1つがチェックされているときよりも。私はそれが要素の名前の問題ではないと思う(しかし、私は命名様式が一貫していないことを認識しているが、私はそれを完全に制御することはできない)。私はそれが私のコードで単純な間違いをしていると仮定していると私はまだそれをキャッチするために十分なJavaスクリプトの経験がありません。誰でも私が間違っているのを見ますか?

ありがとうございました!

+2

try $( '0_exclusive_2176')。onclick = function(){あなたのコードはここにあります} – MilkyWayJoe

答えて

6

あなたはこのようなあなたのクリックハンドラを割り当てている:何が起こっている

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

は次のとおりです。allowが実行され、その戻り値(undefined)をイベントとして設定されています。あなたは、関数にonclickを設定する必要があります。

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

あなたはまた、機能を返すallow行うことができます:予想通り今

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]);は動作するはずです。

+0

素晴らしいです。ありがとうございました!また、私はアバターを大いに賛成します。 – golmschenk

+0

@golmschenk:うれしい!また、ありがとう:-)私は[ポニークリエイター](http://generalzoi.deviantart.com/art/Pony-Creator-Full-Version-254295904)でアバターを作った: - P –

関連する問題