J'essaie d'exclure une entrée par son nom (c'est une entrée cachée contenant mon nonce)
La question suivante est presque ce que je cherche:
Comment utiliser form.serialize de jQuery mais exclure les champs vides
mais j'ai 2 questions sur la solution là-bas qui stipule que pour sérialiser les données de formulaire sauf pour les entrées vides et les entrées où la valeur = "."
$("#myForm :input[value][value!='.']").serialize();
tout d'abord, je ne peux pas le faire fonctionner avec la variable jquery "this"
$('#ofform').live('submit', function(e) {
e.preventDefault();
var serializedReturn = $(this :input[name!='security']).serialize();
});
Et deuxièmement, j'ai un formulaire séparé avec l'identifiant ofform-reset et si j'utilise:
var serializedReturn = $(#ofform :input[name!='security']).serialize();
il prend les entrées dans l'autre # formulaire de réinitialisation de formulaire, ET/OU entrées qui ne sont pas enfermées dans une balise.
trouvé la réponse dans l'une de mes questions précédentes. balise invalide du style:
<form id="ofform">
<div id="toolbar">
<button id="save">Save</button>
</form>
<form id="ofform-reset">
<button id="reset">Reset</button>
</form>
</div>
maintenant pour comprendre comment utiliser 2 boutons différents pour contrôler le même formulaire
Vous n'avez pas besoin du :
car l'entrée est un élément et non un pseudo sélecteur. Deuxièmement, vous ne pouvez pas utiliser un objet et une chaîne de texte comme celle-ci dans votre sélecteur. Vous devez plutôt fournir cela comme argument de la portée de $()
:
$('#ofform').live('submit', function(e) {
e.preventDefault();
var serializedReturn = $('input[name!=security]', this).serialize();
});
Tout d’abord, vous devez invoquer la méthode .find()
comme:
var serializedReturn = $(this).find('input[name!=security]').serialize();
Sinon, la chaîne complète irait dans le moteur de requête CSS (Sizzle).
Deuxièmement:
J'ai un autre formulaire avec l'id de ofform-reset et si j'utilise:
Vous devez changer cela. C'est un balisage invalide d'avoir plusieurs identifiants. Si je vous ai mal compris, la première solution pourrait également vous aider, en invoquant également la méthode .find()
:
var serializedReturn = $('#ofform').find('input[name!=security]').serialize();
Dans ma situation, cela a bien fonctionné:
$("fieldset").not(".tasks-container").serialize()
Je ne suis pas satisfait de 'input[name!=security]'
car il exclut tous les autres types d'entrée tels que select
, .. Vous pouvez les ajouter manuellement, mais cette liste ne cesse de croître avec les nouvelles balises HTML. Donc, à chaque nouvelle balise, votre code est à nouveau cassé.
Voici ma solution:
$form.find(':not(input[name=draft])').serialize()
ou
$('form[name=expenses] :not(input[name=draft])').serialize()
L'espace est très important dans le deuxième exemple.
Vous pouvez filtrer le tableau de résultats
var ignoreFields = ["_csrf"];
$('form')
.serializeArray()
.filter(function(val){
return ignoreFields.indexOf(val.name) === -1;
});
Ou variante plus courte
$('form').serializeArray().filter(val => ignoreFields.indexOf(val.name) === -1)