2012-03-08 7 views
-1

ユーザーが選択するラジオボタンに応じて、選択/ドロップダウンボックス内の選択肢を変更するWebフォームを作成しています。私はこれを達成する方法を発見した、私はこのようにそれを行う:Jquery:いくつかのラジオボタンに応じて選択項目を変更します

var arrayType1=["A", "B", "C"]; 
var arrayType2=["D", "E", "F"]; 
var arraySubType1=["A1", "B1"]; 
var arraySubType2=["C1", "C2"]; 
var mapType={ rbtA : arrayType1, rbtB : arrayType2 } 

$('#rbtA, #rbtB').change(function() { 
    $("#selectType option").remove(); 
    $.each(mapType[this.id], function(i, val) { 
    var opt = $("<option />"); 
    opt.appendTo($("#selectType")).text(val).val(val); 
    }); 
}); 

これは動作します:ここで

<INPUT TYPE="radio" NAME="mainType" id="rbtA" Value="RadiobuttonA" onClick=0>Option 1<br> 
<INPUT TYPE="radio" NAME="maalertype" id="rbtB" Value="RadiobuttonB" onClick=0>Option 2<br> 

<INPUT TYPE="radio" NAME="subType" id="rbtSubA" Value="SubA" />Sub-option 1 
<INPUT TYPE="radio" NAME="subType" id="rbtSubB" Value="SubB" />Sub-option 2 

<b>Make your selection: </b><br> 
<SELECT id="selectType" style="width: 150" NAME="Spenning"> 
    <OPTION selected="selected"></OPTION> 
</SELECT> 

はjqueryのです。ここでは、ユーザーがrbtSubAまたはrbtSubBのいずれかを選択した場合、dropdownbox selectTypeのオプションをarraySubType1またはarraySubType2の代替に変更します。

$('#rbtSubA, #rbtSubB').change(function() { 
    if ($('#rbtSubA').is(':checked')){ 
    //I thought I could do it as simple as changing the content of the value mapType 
    mapType={ rbtA : arraySubType1, rbtB : arrayType2 }; 
    $("#selectType option").remove(); 
    $.each(mapType[this.id], function(i, val) { 
     var opt = $("<option />"); 
     opt.appendTo($("#selectType")).text(val).val(val); 
    }); 
    } 
    if ($('#rbtSubB').is('checked')){ 
    //vice versa 
    } 
}); 

私はこれをChromeで実行し、[ツール] - > [開発ツール]をオンにしました。私は、rbtAとrbtB間selectTypeの変更の内容を交互に、私はrbtSubA、

をselecetとき、私は、エラーメッセージ

"Uncaught TypeError: Cannot read property 'length' of undefined.

を得るとき、私は、誰もが何を見ることができ、ここでは未定義されるかもしれない変数を参照することはできませんこれは間違っていますか?それとも、これが問題を引き起こしている場合、これはいくつかのOTH

+0

[JS Fiddle](http://jsfiddle.net/)..を提案してもいいですか? –

+0

mapVoltageはどこに定義されていますか? –

+0

著者は「誤植」(少なくとも3件)を認めていて、それを収集することを拒否しています。質問が解決されるまで-1。 –

答えて

0

わからない中で行われなければならない、しかし、あなたが:checked疑似クラスセレクタを探してshoudl、ないchecked:そこにあるようにも

if ($('#rbtSubB').is(':checked')){ 

、それが見えます次の行が孤立"を持つ問題:

mapType={ rbtA : arraySubType1, rbtB : arrayType2" }; 

私はあなたが欲しい推測している:

mapType={ rbtA : arraySubType1, rbtB : arrayType2 }; 

これは 'select A'コードにあるとすれば、それがあなたのエラーの原因だと思われます。

+0

rbtSuBについて、_checked_の前にコロンがないと、ここでの誤植に過ぎません。私はrbtSubBの作業を見つめなかったので、まずrbtSubAを動作させる必要があります。もし私がそれを行うことができれば、rbtSubBをまったく同じように動作させることが可能になるはずです。 – Sorin

+0

私は "タイプミス"がまだあることに気付きました。これらを修正できますか? –

0

私はあなたのコード内の2つの問題を参照してください。

:IDはrbtSubAとrbtSubB、ないrbtAとrbtB

  • ご使用mapVoltageの代わりmapTypeは
  • UPDATEある

    • を試してみよう:

      $('#rbtSubA, #rbtSubB').change(function() { 
          if ($(this).is(':checked')){ 
          //I thought I could do it as simple as changing the content of the value mapType 
          mapType={ rbtSubA : arraySubType1, rbtSubB : arraySubType2 }; 
          $("#selectType option").remove(); 
          $.each(mapType[this.id], function(i, val) { 
           var opt = $("<option />"); 
           opt.appendTo($("#selectType")).text(val).val(val); 
          }); 
          } 
      }); 
      
    +0

    "電圧"のものは、私の元のコードではなく、ここでは単にタイプミスです。ここでは電圧ではなく一般的にしたいと思っていましたが、すべての変数の名前を変更するのを忘れました。上記の元の例を編集したので、変数名に関して正しいはずです。 IDが問題になる可能性があります。私はrbtSubAを選択すると、arraySubType1に対してrbtAをマッピングします。さらに、私は質問を投稿したときに改行を忘れてしまった。すべてのHTMLが見えるわけではなく、今修正した。 – Sorin

    +0

    あなたはタイプミスを修正することができます –

    +0

    まあimho、マップタイプは2番目のスニペットの{rbtSubA:arraySubType1、rbtSubB:arrayType2}にする必要があります –

    関連する問題