Le bouton radio n'apparaît pas sous la forme checked
par défaut. J'ai commencé sans un choix par défaut en effectuant une validation JS très simple et cela ne fonctionnait pas. J'ai donc choisi d'utiliser uniquement les valeurs par défaut jusqu'à ce que je découvre que quelque chose de bizarre se passe.
Le balisage est valide et j'ai déjà essayé avec FF, Safari et Chrome. Rien ne fonctionne.
Je pense que c'est un conflit avec la bibliothèque jQuery
car le problème disparaît lorsque je supprime le script d'appel.
<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" />
Si vous avez plusieurs du même nom avec l'attribut vérifié, la dernière radio cochée sur la page sera prise.
<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>
C'est peut-être ça:
Y at-il un bogue avec les boutons radio dans jQuery 1.9.1?
En bref: n'utilisez pas attr () mais prop () pour vérifier les boutons radio. Dieu que je déteste JS ...
La solution de contournement JavaScript ultime à ce problème ennuyeux -
Enroulez simplement la commande jQuery dans un setTimeout
. L'intervalle peut être extrêmement petit, j'utilise 10
millisecondes et il semble bien fonctionner. Le délai est si faible qu'il est pratiquement indétectable pour les utilisateurs finaux.
setTimeout(function(){
$("#radio-element").attr('checked','checked');
},10);
Cela fonctionnera également avec
$("#radio-element").trigger('click');
$("#radio-element").attr('checked',true);
$("#radio-element").attr('checked',ANYTHING_THAT_IS_NOT_FALSE);
Hacky ... hacky ... hacky ... hacky ... Oui je sais ... c'est donc une solution de contournement ....
Les entrées radio doivent être à l'intérieur d'un formulaire pour que "coché" fonctionne.
Hé, je faisais également face à un problème similaire, dans une page générée avec ajax. J'ai pris le source généré à l'aide de Webdeveloper pluggin dans FF, et vérifié toutes les entrées du formulaire et découvert qu'il y avait une autre case à cocher à l'intérieur d'un div masqué (display: none) avec le même identifiant, une fois que j'ai changé l'identifiant de la deuxième case à cocher, cela a commencé à fonctionner .. Vous pouvez également essayer cela .. et laissez-moi savoir le résultat .. à la vôtre
Il suffit de copier votre code dans: http://jsfiddle.net/fY4F9/
Non est coché par défaut. Avez-vous un javascript en cours qui aurait un effet sur la radio?
salut je pense que si vous mettez attribut id pour la deuxième entrée et lui donnez une valeur unique id cela fonctionnera
<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"/>
La documentation de jQuery fournit une explication détaillée de la propriété checked
contre attribut .
En conséquence, voici un autre moyen de récupérer la valeur du bouton radio sélectionné
var accepted = $('input[name="Contact0_AmericanExpress"]:checked').val();
Votre code est correct, essayez de déboguer votre script JQuery pour trouver le problème! Si vous utilisez FF, vous pouvez installer une extension pour déboguer JS (et JQuery) qui s’appelle FireBug.
Je pourrais le reproduire en définissant le nom de la balise input
de la même manière pour deux groupes d'entrées, comme ci-dessous:
<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>
(Pour voir cela en cours d'exécution, cliquez sur ici )
Les deux solutions suivantes résolvent le problème:
form
au lieu de la balise div
pour l'un des groupes (vous ne pouvez pas vraiment comprendre la vraie raison pour laquelle cela résoudrait le problème. J'aimerais entendre des opinions à ce sujet!)**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");
}
});