2012-02-27 1 views
3

お時間をいただきありがとうございます。問題文ののラジオボタンhtmlがチェックアトリビュートがありませんが、ファイアバグはチェックされていることを示します

概要:ブラウザ上のラジオボタンのHTMLは、checked属性を表示しませんが、Firebugのは、ラジオのchecked属性が

Broswerでテスト確認

として設定されていることを示します。 FF 3.6.18およびIE8 のjQuery:1.5 MVC3(レイザー)

詳細

MVC3(Razor付き)を使用して、以下のラジオボタンをサーバーからレンダリングしています。望ましい機能は、1つのラジオをチェックするときに、もう1つはチェックを外し、その逆のラジオをチェックしないことである。つまり、ユーザーはval1またはval2という1つのオプションのみを選択できます。

<div id="myRadioList"> 
    <div> 
     <input type="radio" value="val1" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val1" checked="checked"> 

    </div> 
    <div> 
     <input type="radio" value="val2" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val2"> 
    </div> 
</div> 

私は何を見てると、そのユーザーが選択したラジオを切り替える場合は、新たに選択したラジオは、(のはmyRadioName_val2を言わせて)放火犯を使用してチェックすることが示されているが、確認としてHTMLはまだ他のラジオボタンを反映しています。このため、他のいくつかの検証は失敗しています。

私は両方のラジオボタンのチェックされた属性をそのまま削除してから、クリックしたものだけをチェックしてみました。

これは、それは私が不必要な詳細を掲載避けるために、自分のコードを簡素化してい

$("#myRadioList > div > input[value='myRadioName_val2]').attr('checked', 'checked'); 

が動作していない、私は現在クリックされたラジオを設定するためにやっているものです。

ありがとうございます!

+1

セレクタに見積もりの​​ミスマッチがあり、htmlの変更が表示されない場合は、prop()メソッドを使用してください。 – charlietfl

答えて

4

を使用する必要があります。 checkedのプロパティはJavaScriptはラジオボタンの現在の状態を指します。

一般的に、ブラウザで自分で設定するのではなく、ラジオボタンとチェックボックスの状態をcheckedの状態で処理することをお勧めします。そうしないと、このような問題が発生します。すでに提案されているようにprop("checked")、または.is(":checked")によって現在の状態を取得することは安全です。

$('#myRadioList').find('input[value="myRadioName_val2"]')以上の構文を使用することを検討することもできます。$('#myRadioName_val2') jQueryの子セレクタは、右から左に読み込まれるため、かなり遅くなる可能性があります。

+0

素晴らしい説明をありがとうございます! – m27

0

まあ、jQueryセレクタに構文エラーがあります。それは次のようになります。

$('#myRadioList > div > input[value="myRadioName_val2"]') 
4

あなたはHTMLchecked属性がデフォルト値である

$("#myRadioList > div > input[value=myRadioName_val2]").prop('checked', true); 
関連する問題