デフォルトでは、ラジオボタンはchecked
として表示されません。いくつかの非常に単純なjs検証を行うデフォルトの選択なしで始めましたが、動作しませんでした。それで、それを理解し、奇妙なことが起こっていることを発見するまで、デフォルト値を使用することを選択しました。
マークアップは有効であり、FF、Safari、Chromeで試しました。何も動作しません。
コールスクリプトを削除すると問題がなくなるため、jQuery
ライブラリとの競合だと思います。
<label>Do you want to accept American Express?</label> Yes
<input id="amex" style="width: 20px;" type='radio' name='Contact0_AmericanExpress' value='1' /> No
<input style="width: 20px;" type='radio' name='Contact0_AmericanExpress' class='check' value='0' checked="checked" />
Checked属性を持つ同じ名前が複数ある場合、ページ上で最後にチェックされたラジオが使用されます。
<form>
<label>Do you want to accept American Express?</label>
Yes<input id="amex" style="width: 20px;" type="radio" name="Contact0_AmericanExpress" />
maybe<input id="amex" style="width: 20px;" type="radio" name="Contact0_AmericanExpress" checked="checked" />
No<input style="width: 20px;" type="radio" name="Contact0_AmericanExpress" class="check" checked="checked" />
</form>
ラジオ入力は、「チェック済み」が機能するためにフォーム内になければなりません。
この迷惑な問題に対する究極のJavaScript回避策-
JQueryコマンドをsetTimeout
で囲むだけです。間隔は非常に小さくすることができ、10
ミリ秒を使用し、うまく機能しているようです。遅延は非常に小さいため、エンドユーザーには事実上検出できません。
setTimeout(function(){
$("#radio-element").attr('checked','checked');
},10);
これも動作します
$("#radio-element").trigger('click');
$("#radio-element").attr('checked',true);
$("#radio-element").attr('checked',ANYTHING_THAT_IS_NOT_FALSE);
Hacky ... hacky ... hacky ... hacky ...はい、わかっています...したがって、これは回避策です。
ちょっと私もajaxで生成されたページで同様の問題に直面していました。同じIDで、2番目のチェックボックスのIDを変更すると、機能し始めました。また、それを試すこともできます。
コードをコピーしてください: http://jsfiddle.net/fY4F9/
デフォルトではチェックされていません。ラジオボックスに影響するjavascriptを実行していますか?
こんにちは、2番目の入力にid属性を設定し、一意のid値を指定すると機能すると思います
<label>Do you want to accept American Express?</label>
Yes<input id="amex" style="width: 20px;" type='radio' name='Contact0_AmericanExpress' value='1'/>
No<input style="width: 20px;" id="amex0" type='radio' name='Contact0_AmericanExpress' class='check' value='0' checked="checked"/>
JQueryのドキュメントには、 checked
プロパティと属性の詳細な説明 が記載されています。
したがって、選択したラジオボタンの値を取得する別の方法は次のとおりです。
var accepted = $('input[name="Contact0_AmericanExpress"]:checked').val();
コードは正しいので、JQueryスクリプトをデバッグして問題を見つけてください。 FFを使用している場合は、FireBugと呼ばれるJS(およびJQuery)をデバッグするための拡張機能をインストールできます。
これを再現するには、次のような2つの入力グループに対してinput
タグの名前を同じに設定します。
<body>
<div>
<div>
<h3>Header1</h3>
</div>
<div>
<input type="radio" name="gender" id="male_1" value="male"> Male<br>
<input type="radio" name="gender" id="female_1" value="female" checked="checked"> Female<br>
<input type="submit" value="Submit">
</div>
</div>
<div>
<div>
<h3>Header2</h3>
</div>
<div>
<input type="radio" name="gender" id="male_2" value="male"> Male<br>
<input type="radio" name="gender" id="female_2" value="female" checked="checked"> Female<br>
<input type="submit" value="Submit">
</div>
</div>
</body>
(この実行を確認するには、 here をクリックします)
次の2つの解決策は両方とも問題を解決します。
form
タグの代わりにdiv
タグを使用します(これが問題を解決する本当の理由を実際に理解することはできません。これについての意見をお聞かせください!)**Radio button aria-checked: true or false one at a time**
$('input:radio[name=anynameofinput]').change(function() {
if (this.value === 'value1') {
$("#id1").attr("aria-checked","true");
$("#id2").attr("aria-checked","false");
}
else if (this.value === 'value2') {;
$("#id2").attr("aria-checked","true");
$("#id1").attr("aria-checked","false");
}
});