2013-09-04 5 views
9

j'ai une chose tableau commeplusieurs cases à cocher en utilisant jquery

var values = ['1','3','4','5']; 

Je la liste des cases à cocher

<div id='list'> 
    <input type='checkbox' value='1' /> 
    <input type='checkbox' value='2' /> 
    <input type='checkbox' value='3' /> 
    <input type='checkbox' value='4' /> 
    <input type='checkbox' value='5' /> 
    <input type='checkbox' value='6' /> 
    <input type='checkbox' value='7' /> 
    <input type='checkbox' value='8' /> 
    <input type='checkbox' value='9' /> 
    <input type='checkbox' value='10' /> 
</div> 

maintenant je veux choisir des cases à cocher dont les valeurs se situe dans les valeurs de tableau. J'ai fait ceci

for(var i = 0; i < values.length; i++) 
    $("#list [value=" + values[i] + "]").attr("checked", "checked"); 

il fonctionne bien mais je peux le faire sans pour la boucle.

Merci d'avance pour les aides.

+0

Quel est le problème avec la boucle for ? – Archer

+1

Vous devez utiliser 'prop' au lieu de' attr' pour les valeurs booléennes. http://api.jquery.com/prop/ –

Répondre

16

Essayez

$("#list").find('[value=' + values.join('], [value=') + ']').prop("checked", true); 

Démo: Fiddle

+0

Je pense que je préfèrerais nous une boucle pour des raisons de lisibilité mais +1 pour donner à l'op ce qu'il a demandé – andrew

+0

ce identique à @Blazemongers, juste avec une découverte supplémentaire? – mplungjan

2

Vous pouvez utiliser filter comme ci-dessous, mais il est le même que for boucle si ..

$('#list :checkbox').filter(function() { 
    return $.inArray(this.value, values) >= 0; 
}).prop('checked', true); 
+0

il utilise encore une itération –

+0

@ArunPJohny Oui, je l'ai mentionné .. mais c'est une meilleure approche que d'utiliser un 'pour..loop' –

+0

Pourquoi est-ce un meilleur approche qu'une boucle for ou chacun? Il est beaucoup plus difficile à lire – mplungjan

8

Vous pouvez faire encore plus succinctement avec un seul sélecteur combiné:

$('#list [value="'+values.join('"],[value="')+'"]').prop('checked',true); 

qui produit un sélecteur comme:

$('#list [value="1"],[value="3"],[value="4"],[value="5"]') 

http://jsfiddle.net/mblase75/jgqm4/

1

Vous pouvez remplacer votre boucle for avec .each $

JQuery

$.each(values, function() { 
    $("#list [value=" + this + "]").attr("checked", "checked"); 
}); 
+0

N'a pas fonctionné pour moi '$ .each (values, function() { $ (" # liste ['value = "' + this + '"]'). Attr (" cocher "," coché "); });' est la bonne combinaison – anton

Questions connexes