2010-02-25 8 views
1

Je possède ce code, qui fonctionne très bien:Meilleur code jQuery pour sélectionner un bouton radio si aucun n'est sélectionné?

if ($('table#attribute_Size input.quantitycheckbox:checked').length == 0) 
    $('table#attribute_Size input.quantitycheckbox:first').attr({ checked: true }); 

Comme vous pouvez le voir si, il est assez long et la plupart du sélecteur est répété. Y a-t-il un bon moyen de le raccourcir? J'ai essayé ceci mais cela ne fonctionne pas (je suppose qu'il regarde des éléments imbriqués au lieu du sélecteur courant).

var $sizeRadios = $('table#attribute_Size input.quantitycheckbox'); 
if ($(':checked', $sizeRadios).length == 0) 
    $(':first', $sizeRadios).attr({ checked: true }); 

Répondre

3

Vous pouvez essayer ... il est un peu plus court. Je n'ai pas testé mais je devrais travailler.

var $sizeRadios = $('#attribute_Size input.quantitycheckbox'); 
if (!$sizeRadios.is(":checked")) 
    $sizeRadios.eq(0).attr("checked", true); 
+0

Eh oui, ne connaissait pas la fonction 'is'. J'ai corrigé la clause if - elle ne devrait vérifier le premier bouton que si aucun n'est coché - et enlevé "table" du sélecteur selon la suggestion de David Radcliffe. – DisgruntledGoat

+0

Cela pourrait rendre le code un peu plus long pour inclure la table, mais cela la rendrait également un peu plus performante. C'est un compromis, mais personnellement je laisserais la table. – Lindsay

+0

Une autre chose ... vérifier une condition négative avec des sélecteurs est parfois difficile car il peut y avoir plusieurs éléments retournés. Si le premier n'arrive pas à être un match, alors vous obtiendrez un faux positif si l'un des autres est. Donc, pour la condition négative vous serait probablement plus en sécurité ceci: si (sizeRadios.filter $ (. « : Vérifié ») Longueur == 0) .filter supprime tous les nœuds du jeu de retour qui répondent à la condition . – Lindsay

0

Vous pouvez le rendre un peu plus court en supprimant la "table" au début de chaque sélecteur. C'est 100% inutile et ralentit réellement jQuery. Vous pouvez également mettre en cache la table objet jQuery comme ceci:

var $table = $('#attribute_Size'); 
if ($('input.quantitycheckbox:checked', $table).length == 0) 
    $('input.quantitycheckbox:first', $table).attr('checked', true); 
0

Vous pouvez également écrire:

var $table = $('#attribute_Size'); 
if (!$table.find('input.quantitycheckbox').is(':checked')) 
    $table.find('input.quantitycheckbox:first').attr('checked', true); 

Pas vraiment "meilleur" ou quoi que ce soit, juste un style différent.

[modifier] oh J'aime mieux Lindsay.

0

Une requête de sélection:

$('#attribute_Size:not(:has(input.quantitycheckbox:checked)) input.quantitycheckbox:first').attr({ checked: true }); 
Questions connexes