Comment puis-je sérialiserArray pour les cases à cocher non cochées?
Comment puis-je modifier cet exemple de sorte qu'il peut obtenir les valeurs à partir des cases qui ne sont pas contrôlés?
Je veux que toutes les cases à cocher pour avoir une valeur, si elle n'a pas été vérifié je veux obtenir sa valeur en tant que false
.
<input type="checkbox" name="Check01" value="true" />
<input type="checkbox" name="Check02" value="true" checked="checked" />
Comportement par défaut
$("form").serializeArray();
//[Check02 = true]
Comportement attendu
$("form").serializeArray();
//[Check01 = false, Check02 = true]
source d'informationauteur BrunoLM
Vous devez vous connecter pour publier un commentaire.
Il est probablement plus facile de simplement le faire vous-même:
Si il y a d'autres entrées, alors vous pouvez sérialiser la forme, et ensuite trouver la décoché les cases à cocher avec quelque chose comme ci-dessus et d'ajouter que le résultat pour le premier tableau.
serializeArray
ignore les cases qui ne sont pas vérifiées. Vous pouvez essayer quelque chose comme cela.De travail démo
vous pouvez utiliser cette option décochée valeurs
des exemples de code
vous pouvez ajouter un caché valeur false pour chaque case:
Vous obtiendrez uniquement des "fausses" valeurs décoché les cases à cocher et à la fois "vrai" et "faux" pour les cases à cocher, de sorte que vous pouvez supprimer les doublons comme ceci:
une autre option est de simplement regarder le code source pour serializeArray et supprimer (ou modifier) l'appel à filtre. J'ai Juste pris cette fonction et a créé une nouvelle appelée serializeArrayAll comme ceci:
};
L'aide du plugin jQuery serializeJSONvous pouvez utiliser le
data-unchecked-value
attribut pour spécifier la valeur lorsque cette option est décochée:JavaScript:
Voici comment j'ai mis en place un simple remplacement de
$.serializeArray
qui fixe la sérialisation par défaut le comportement des cases à cocher, et le comportement par défaut est conservé pour tous les autres types.Dans le code ci-dessous, de manquer des cases à cocher sont injectés dans l'original sérialisé tableau. Case à cocher état est retourné comme
"true"
(au lieu de"on"
) ou"false"
selon si elle estchecked
ou pas.Vous pouvez personnaliser ce retour
"on"/"off"
outrue/false
.Mise à jour: correction de code basé sur bug trouvé par @shyammakwana.moi.
J'ai fait ma propre nouvelle solution basée sur les réponses de @Pointu, @Ben, et l'original du code jQuery. La réponse de @Pointu avait un comportement étrange qui a renvoyé les contextes, cases à cocher, cela résout le problème. La réponse de @Ben l'était aussi de ne pas agir correctement, car il revenait toujours
checkbox = on
même si elle a été désactivée.Encore Un Autre SerializeArray()
Cette mise en œuvre est encore une fois basé sur jQuery code original, mais j'en avais besoin pour certains Bootstrap "switch" des cases à cocher avec deux valeurs différentes.
@Hic, la réponse de travailleur de près de 99% juste avec un peu de correction.
Changement en dessous de la ligne
à partir de :
à:
Explication: Comme ce n'était pas de travail parce que
this
retourné élément de formulaire. Donc sur la forme.each
de ne pas nous donner la saisie de tous les éléments à l'intérieur de la forme. J'ai donc fait cette correction et cela a fonctionné comme un charme.