2010-08-16 5 views
2

: Ceplusieurs sélecteurs jquery

$('input.people').attr('checked', false).filter('[name=toddS]').attr('checked', true); 

sélectionnera une case à cocher avec la classe des personnes et le nom todds tout décocher toutes les autres cases.

Comment puis-je ajouter un autre nom au filtre? J'ai essayé plusieurs combinaisons différentes et rien ne fonctionne. Voilà ce que j'ai:

$('input.people').attr('checked', false).filter('[name=toddS], [name=gwenD]').attr('checked', true); 

Répondre

0

Vous pouvez use a function there pour sélectionner celles que vous voulez seulement.

$('input.people') 
    .removeAttr('checked') 
    .filter(function() { 
     return ($(this).attr('name') === 'toddS' || $(this).attr('name') === 'gwenD'); 
    }) 
    .attr('checked', 'checked'); 

J'ai aussi utilisé removeAttr() au lieu de le mettre à false. Je n'ai pas vérifié ce que jQuery fait en le mettant à false, mais d'un point de vue HTML, être décoché devrait signifier l'absence de cet attribut.

1

Vous pouvez passer une fonction dans .attr(), comme ceci:

$('input.people').attr('checked', function() { 
    return this.name == 'toddS' || this.name == 'gwenD'; 
}); 

Si vous devez ajouter plus tard, vous pouvez utiliser quelque chose qui fonctionne pour plusieurs valeurs, par exemple $.inArray(), comme ceci:

$('input.people').attr('checked', function() { 
    return $.inArray(this.name, ['toddS', 'gwenD']) != -1; 
}); 
+0

Yup; les intentions sont beaucoup plus claires avec cette alternative. – strager

+0

Merci, Nick. Maintenant, comment puis-je décocher Todd et Gwen lorsque leur position (s) sont décochées? –

+0

@ sehummel65 - Pouvez-vous clarifier un peu? Je ne comprends pas la question ... vous voulez l'inverse, ou pour décocher tout le monde ou ...? –