27 votes

Boucler des éléments dans jQuery

Je veux faire une boucle sur les éléments d'un formulaire HTML, et de stocker les valeurs de <input> dans les champs d'un objet. Le code suivant ne fonctionne pas, si:

function config() {
    $("#frmMain").children().map(function() {
        var child = $("this");
        if (child.is(":checkbox"))
            this[child.attr("name")] = child.attr("checked");
        if (child.is(":radio, checked"))
            this[child.attr("name")] = child.val();
        if (child.is(":text"))
            this[child.attr("name")] = child.val();
        return null;
    });

Ni le suivant (inspiré par jobscry de la réponse):

function config() {
    $("#frmMain").children().each(function() {
        var child = $("this");
        alert(child.length);
        if (child.is(":checkbox")) {
            this[child.attr("name")] = child.attr("checked");
        }
        if (child.is(":radio, checked"))
            this[child.attr("name")] = child.val();
        if (child.is(":text"))
            this[child.attr("name")] = child.val();
    });
}

L'alerte indique toujours qu' child.length == 0. En sélectionnant manuellement les éléments œuvres:

>>> $("#frmMain").enfants (les)
Objet longueur=42
>>> $("#frmMain").les enfants().filtre ("case")
Objet longueur=3

Tous les conseils sur la façon de faire la boucle correctement?

40voto

imjoevasquez Points 4052

ne pensez pas que vous avez besoin de devis à ce sujet:

 var child = $("this");
 

essayer:

 var child = $(this);
 

28voto

imjoevasquez Points 4052

jQuery a une excellente fonction pour parcourir un ensemble d'éléments: .each ()

 $('#formId').children().each(
    function(){
        //access to form element via $(this)
    }
);
 

13voto

Hugoware Points 13645

Selon ce dont vous avez besoin pour chaque enfant (si vous cherchez à le publier quelque part via AJAX), vous pouvez simplement le faire ...

 $("#formID").serialize()
 

Il crée une chaîne pour vous avec toutes les valeurs automatiquement.

En ce qui concerne le bouclage d'objets, vous pouvez également le faire.

 $.each($("input, select, textarea"), function(i,v) {
    var theTag = v.tagName;
    var theElement = $(v);
    var theValue = theElement.val();
});
 

3voto

SpoonMeiser Points 6211

J'ai utilisé les informations suivantes avant de:

var my_form = $('#form-id');
var data = {};

$('input:not([type=checkbox]), input[type=checkbox]:selected, select, textarea', my_form).each(
    function() {
        var name = $(this).attr('name');
        var val = $(this).val();

        if (!data.hasOwnProperty(name)) {
            data[name] = new Array;
        }

        data[name].push(val);
    }
);

C'est juste écrit à partir de la mémoire, donc susceptible de contenir des erreurs, mais cela devrait rendre un objet appelé data qui contient les valeurs pour toutes vos entrées.

Notez que vous avez à traiter avec des cases à cocher dans une manière spéciale, pour éviter d'obtenir les valeurs de décoché les cases à cocher. La même chose est probablement le cas de l'entrée radio.

Notez également l'utilisation des tableaux pour stocker les valeurs, comme pour une entrée de nom, vous pourriez avoir des valeurs à partir de plusieurs entrées (cases à cocher en particulier).

0voto

Peter Points 805

si vous souhaitez utiliser la fonction each, elle devrait ressembler à ceci:

 $('#formId').children().each( 
  function(){
    //access to form element via $(this)
  }
);
 

Il suffit de changer le crochet bouclé de fermeture pour une paren proche. Merci de l'avoir signalé, Jobscry, tu m'as fait gagner du temps.

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