web-dev-qa-db-fra.com

Les boutons radio et .attr ('vérifié', 'vérifié') ne fonctionnent PAS dans IE7

Existe-t-il un moyen de vérifier les boutons radio lors de l'ajout dans IE7?

Ce qui semble fonctionner dans tous les navigateurs ne semble pas fonctionner dans IE6,7 malgré la lecture partout que je le fais correctement. Je n'ai absolument aucune idée pourquoi cela ne fonctionne pas.

var $itemVariantRowRadio = $("<input/>")
    .attr("type", "radio")
    .attr("name", "itemvariant")
    .addClass("itemvariant")
    .val('whatever');


    $itemVariantRowRadio.attr('checked', 'checked');
    $itemVariantRow.append($itemVariantRowRadio)

Maintenant, si je fais une console.log($itemVariantRowRadio.attr('checked') dans IE6/7, alors il dit qu'il est réglé sur VRAI mais la radio n'est pas réellement vérifiée ou décrochée comme vérifiée.

Cauchemar! Quelqu'un d'autre a rencontré cela et a une sorte de solution?

15
Intellix

Si dans jQuery> = 1.6:

Utilisez prop comme ici: . Prop () vs .attr ()

$itemVariantRowRadio.prop('checked', true);

Si dans jQuery <1.6:

$itemVariantRowRadio.attr('checked', true);

AUSSI:

Essayez de créer votre élément comme ceci:

var $itemVariantRowRadio = $("<input/>",{
     type: 'radio',
     name: 'itemvariant',
     class: 'itemvariant',
     checked: true,
     value: 'whatever'
});
$itemVariantRow.append($itemVariantRowRadio);

Voir violon: http://jsfiddle.net/maniator/6CDf3/
Un exemple avec 2 entrées en annexe: http://jsfiddle.net/maniator/6CDf3/2/

36
Neal

Essayez: $itemVariantRowRadio.not(':checked').click().change();

Vous cochez donc la case comme vous le feriez en tant qu'utilisateur avec la souris. not(':checked') vous assurera qu'elle n'a pas déjà été vérifiée auparavant. Et déclenchez ensuite l'événement de modification, car jQuery click ne le fait pas lui-même.

4
sod

MSIE ne vous permet pas de modifier le type d'un élément input une fois qu'il a été créé.

Voir http://bugs.jquery.com/ticket/1536 et http://api.jquery.com/jQuery/#jQuery2

Il suffit de le créer ainsi:

$('<input type="radio">')
2
Alnitak

Vous n'avez pas besoin de déclencher l'événement click si vous appliquez l'attribut vérifié après l'avoir ajouté au dom: http://jsfiddle.net/XjHUe/2/

<div id='content'></div>
var $itemVariantRowRadio = $("<input/>")
    .attr("type", "radio")
    .attr("name", "itemvariant")
    .addClass("itemvariant")
    .val('whatever');
//$itemVariantRowRadio.attr("checked", true);
$("#content").append($itemVariantRowRadio);
$(".itemvariant").attr('checked',true);

var val = $(".itemvariant").attr("checked");
alert(val);
0
scrappedcola