web-dev-qa-db-fra.com

JQUERY: récupère les identifiants des checkBox cochés et non cochés

J'ai moins de cases à cocher:

<input type="checkbox" id="mango" value="mango" /> <label>MANGO</label><br>
<input type="checkbox" id="santol" value="santol" /> <label>SANTOL</label><br>
<input type="checkbox" id="guava" value="guava" /> <label>GUAVA</label><br>
<input type="checkbox" id="lomboy" value="lomboy" /> <label>LOMBOY</label><br>
<input type="checkbox" id="Apple" value="Apple" /> <label>Apple</label><br>
<input type="checkbox" id="orange" value="orange" /> <label>ORANGE</label><br>
 ...................<>

Maintenant, ce que j'essaie de faire, c'est d'obtenir tous les ID des cases à cocher avec une case à cocher, et aucune case à cocher et à mettre dans un tableau. Quelque chose comme ça:

"fruitsGranted":["Apple","lomboy","orange"]; //check is true
"fruitsDenied":["mango","santol","guava"];  //check false

peut plaire à quelqu'un de me montrer comment faire.? Merci.

22
jayAnn
var someObj={};
someObj.fruitsGranted=[];
someObj.fruitsDenied=[];

$("input:checkbox").each(function(){
    var $this = $(this);

    if($this.is(":checked")){
        someObj.fruitsGranted.Push($this.attr("id"));
    }else{
        someObj.fruitsDenied.Push($this.attr("id"));
    }
});

http://jsfiddle.net/UqrYJ/

43
James Montagne

Je pense que j'ai une version plus courte ici:

var idSelector = function() { return this.id; };
var fruitsGranted = $(":checkbox:checked").map(idSelector).get();
var fruitsDenied = $(":checkbox:not(:checked)").map(idSelector).get();

Vous pouvez le voir en action ici: http://jsfiddle.net/XPMjK/3/

25
Mo Valipour

Je ferais ceci quelque chose comme ceci:

var all, checked, notChecked;
all = $("input:checkbox");
checked = all.filter(":checked");
notChecked = all.not(":checked)");

Après cela, vous pouvez utiliser jQuery.map pour obtenir les identifiants de chaque collection.

var checkedIds = checked.map(function() {
    return this.id;
});

var notCheckedIds = notChecked.map(function() {
    return this.id;
});
5
John Kalberer

Cela peut être fait en utilisant .map , mais dans ce cas, ce n'est pas vraiment différent de l'utilisation de .each:

$(":checkbox").change(function() {
    var notChecked = [], checked = [];
    $(":checkbox").map(function() {
        this.checked ? checked.Push(this.id) : notChecked.Push(this.id);
    });
    alert("checked: " + checked);
    alert("not checked: " + notChecked);
});

Vous pouvez le tester ici.

2
karim79