2010-07-15 21 views
2

Voici ma configuration: Si radiobutton1 est déjà cochée lorsque la page se charge (il a checked="checked" dans la source) et je tente de décocher après avoir sélectionné radiobutton2, l'attribut checked sur radiobutton1 est ne s'enlevé après avoir sélectionné radiobutton2:Pas en mesure de décocher un bouton radio après avoir sélectionné un autre

if($('#' + radiobutton1_ID).is(':checked')) 
    UncheckRadioButton('#' + radiobutton2_ID); 

// Utility function to clear a radiobutton's "checked" attribute 
function UncheckRadioButton(radiobuttonID) { 
    radiobuttonID.removeAttr("checked"); 
} 

après avoir sélectionné radiobutton2 et de faire une « Afficher la source » Je ne vois pas checked="checked" sur radiobutton2 (même si la page sur ce bouton comme coché), et pour radiobutton1 il encore montre checked="checked". Pourquoi donc? Il devrait être l'inverse.


MISE À JOUR

Voici un peu plus de mon code. Je sais que les if parties de déclaration sont faire frapper si ce n'est pas la question, et je sais que les ID de bouton radio (ccRadioBtn, checkRadioBtn et paypalRadioButton) J'utilise sont corrects:

var ccRadioBtn = ccRadioButton; // credit card radio button ID 
    var paypalRadioButton = payPalRadioClientID; 

    // ... 

    if (paypalIsSelected()) { 
     UncheckRadioButton(checkRadioBtn); 
     UncheckRadioButton(ccRadioBtn); 

     // ... 
    } else { 
     // force a clear on any previously selected payment options 
     CheckRadioButton(ccRadioBtn); // default to credit card radio button 
     UncheckRadioButton(paypalRadioButton); 
     UncheckRadioButton(checkRadioBtn); 

     // ... 
    } 
} 

function UncheckRadioButton(radiobuttonID) { 
    $('#' + radiobuttonID).removeAttr("checked"); 
} 

function CheckRadioButton(radiobuttonID) { 
    $('#' + radiobuttonID).attr('checked', true); 
} 

Le problème est le suivant: Si un poste de radio bouton par défaut à checked="checked" et je clique sur un autre bouton radio, l'attribut checked du premier bouton radio doit être supprimé, mais ce n'est pas le cas. Et le deuxième bouton radio qui a été sélectionné n'a pas checked="checked" comme il se doit. Je peux voir cela quand je regarde la source de la page. Je ne sais pas pourquoi cela ne fonctionne pas.

+0

J'ai mis à jour mon message avec mon code actuel. Le problème existe toujours. – PositiveGuy

+0

le problème a fini par ne pas être un problème de JS mais j'ai obtenu beaucoup de ce fil. Merci à tous ceux qui ont répondu. – PositiveGuy

Répondre

5

vous passez une chaîne ici:

UncheckRadioButton('#' + radiobutton_2_ID); 

Mais en essayant de l'utiliser comme un objet jQuery ici:

radiobuttonID.removeAttr("checked"); 
//which is actually doing this: 
"#something".removeAttr("checked"); //.removeAttr() is not a function for string 

Vous devez envelopper l'utiliser comme un sélecteur, comme ceci:

$(radiobuttonID).removeAttr("checked"); 

en ce qui concerne la source de vue ... cela dépend du navigateur, IE par exemple affiche le original source de la page, pas l'état que vous consultez actuellement.

+0

merci, ça a été une longue journée, je ne m'en suis pas rendu compte. – PositiveGuy

+0

Ça ne marche toujours pas. Je ne sais pas pourquoi mais encore une fois si je sélectionne radiobutton1, la source de vue a vérifié = "vérifié" comme prévu. Mais après que je change et sélectionne radiobutton2 et puis regarde la source, radiobutton1 a toujours vérifié = "vérifié" et radiobutton2 n'a aucun attribut vérifié du tout. Y a-t-il quelque chose que je ne connais pas sur le DOM ici? Peut-être que la source de vue ne représente pas l'état actuel? Signification si je change de radiobutton2 après radiobutton1 l'état n'est pas réalisé jusqu'à un postback? – PositiveGuy

+0

@coffeeaddict - L'interface utilisateur est-elle vérifiée, mais pas la source de la vue? aussi quel navigateur utilisez-vous? Vous devriez utiliser Chrome ou Firebug et inspecter l'élément pour obtenir une vue * courant * précise. –