57 votes

Désactiver les boutons radio avec jQuery

J'essaie de désactiver ces boutons radio lorsque l'on clique sur le lien loadActive, mais pour une raison quelconque, il ne désactive que le premier dans l'ordre et ignore les autres.

<form id="chatTickets" method="post" action="/admin/index.cfm/">
    <input id="ticketID1" type="radio" checked="checked" value="myvalue1" name="ticketID"/>
    <input id="ticketID2" type="radio" checked="checked" value="myvalue2" name="ticketID"/>
</form>
<a href="#" title="Load ActiveChat" id="loadActive">Load Active</a>

Et voici le jquery que j'utilise :

jQuery("#loadActive").click(function() {
    //I have other code in here that runs before this function call
    writeData();
});
function writeData() {
    jQuery("input[name='ticketID']").each(function(i) {
    jQuery(this).attr('disabled', 'disabled');
});
}

1 votes

Avez-vous essayé d'utiliser firebug, d'utiliser le sélecteur pour obtenir un tableau d'éléments et de voir combien il y en a dans le tableau ?

0 votes

Tout ce que vous avez là fonctionne bien pour moi.

0 votes

Oui, cela fonctionne aussi dans mon bac à sable, bien que cela provienne d'un fichier beaucoup plus grand, je pense que quelque chose d'autre fait que cela ne fonctionne pas. En utilisant les classes, en les sélectionnant différemment, on ne désactive toujours que la première radio et pas les autres. Mais dans le bac à sable, cela fonctionne parfaitement.

63voto

KCOtzen Points 97

Supprimez votre "chacun" et utilisez simplement :

$('input[name=ticketID]').attr("disabled",true);

C'est aussi simple que cela. Ça marche

53voto

karim79 Points 178055

J'ai un peu remanié votre code, cela devrait fonctionner :

jQuery("#loadActive").click(writeData);

function writeData() {
    jQuery("#chatTickets input:radio").attr('disabled',true);
}

S'il y a plus de deux boutons radio dans votre formulaire, vous devrez modifier le sélecteur, par exemple, vous pouvez utiliser la balise commence par un filtre d'attributs pour sélectionner les radios dont l'ID commence par ticketID :

function writeData() {
    jQuery("#chatTickets input[id^=ticketID]:radio").attr('disabled',true);
}

0 votes

Cela désactivera tous les boutons radio de ce formulaire. Dans sa question, il n'y en a peut-être que deux, mais il y en aura probablement plus.

0 votes

@geowa4 - c'est vrai, j'ai supposé que c'étaient les seules radios sur son formulaire. Dans tous les cas, j'ai modifié le texte pour qu'il soit un peu plus utile.

1 votes

+1 pour la suppression de l'inutile .each() ; .attr() s'appliquera de toute façon à tous les éléments sélectionnés.

9voto

mkoryak Points 18135

Tout d'abord, la syntaxe valide est

jQuery("input[name=ticketID]")

Ensuite, avez-vous essayé :

jQuery(":radio")

à la place ?

troisièmement, pourquoi ne pas attribuer une classe à tous les boutons radio, et les sélectionner par classe ?

1 votes

En fait, "input[name='ticketID']" est une syntaxe valide, les guillemets simples ne sont simplement pas nécessaires.

1 votes

Pourquoi ne pas simplement utiliser le nom ? et les sélectionner par ce biais ? cela devrait fonctionner correctement ; je l'ai fait un million de fois.

0 votes

Je suis d'accord avec mkoryak : "attribuer une classe à tous les boutons radio, et les sélectionner par classe"

3voto

geowa4 Points 17712

Je viens de construire un environnement sandbox avec votre code et cela a fonctionné pour moi. Voici ce que j'ai utilisé :

<html>
  <head>
    <title>test</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  </head>
  <body>
    <form id="chatTickets" method="post" action="/admin/index.cfm/">
      <input id="ticketID1" type="radio" checked="checked" value="myvalue1" name="ticketID"/>
      <input id="ticketID2" type="radio" checked="checked" value="myvalue2" name="ticketID"/>
    </form>
    <a href="#" title="Load ActiveChat" id="loadActive">Load Active</a>

    <script>
      jQuery("#loadActive").click(function() {
        //I have other code in here that runs before this function call
        writeData();
      });
      function writeData() {
        jQuery("input[name='ticketID']").each(function(i) {
            jQuery(this).attr('disabled', 'disabled');
        });
      }
    </script>
  </body>
</html>

J'ai testé dans FF3.5, je passe maintenant à IE8. Et ça marche bien dans IE8 aussi. Quel navigateur utilisez-vous ?

2voto

ranonE Points 368

Code :

function writeData() {
    jQuery("#chatTickets input:radio[id^=ticketID]:first").attr('disabled', true);
    return false;
}

Voir aussi : Sélecteur/radio , Sélecteur/attributStartsWith , Sélecteur/premier

0 votes

Je suis presque sûr que c'est l'exact opposé de ce que le PO veut.

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