88 votes

L'attribut "vérifié" des boutons radio ne fonctionne pas

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

Le radio bouton n'apparait pas comme cochée par défaut. J'ai commencé sans un choix par défaut de faire quelques très simple js validation et il ne fonctionnait pas. J'ai donc choisi d'utiliser les valeurs par défaut jusqu'à ce que j'ai compris et découvert que quelque chose de bizarre qui se passe.

Le balisage est valable, et j'ai essayé en FF, Safari et Chrome. Rien ne fonctionne.

Je pense que c'est un conflit avec la bibliothèque JQuery parce que le problème s'en va quand j'enlève le script d'appel.

107voto

jeeves Points 291

Si vous avez plusieurs du même nom avec l'attribut vérifié, la dernière radio cochée sur la page sera utilisée.

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

39voto

M.G.Palmer Points 1312

C'est peut-être ça:

Existe-t-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 ...

11voto

Lix Points 27516

L'ultime JavaScript solution de contournement à ce problème ennuyeux -

Enroulez simplement le jQuery commande dans un setTimeout. L'intervalle peut être extrêmement petit, j'utilise 10 millisecondes et il semble fonctionner parfaitement. Le délai est si petit qu'il est pratiquement indétectable à la fin les utilisateurs.

setTimeout(function(){
  $("#radio-element").attr('checked','checked');
},10);

Cela permettra également de travailler 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....

5voto

Codemator Points 308

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 caché (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 ..

3voto

Ben Rowe Points 15269

Il suffit de copier votre code dans: http://jsfiddle.net/fY4F9/

Non est coché par défaut. Avez-vous un javascript en cours d'exécution qui affecterait la radio?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X