Bestimmte Eingaben beim Serialisieren ausschließen

Lesezeit: 4 Minuten

Benutzer-Avatar
Helgathewikinger

Ich versuche, eine Eingabe nach Namen auszuschließen (es ist eine versteckte Eingabe, die meine Nonce enthält)

Die folgende Frage ist fast das, wonach ich suche:

Wie verwende ich form.serialize von jQuery, schließe aber leere Felder aus

aber ich habe 2 Fragen zu der dortigen Lösung – die besagt, dass Formulardaten mit Ausnahme leerer Eingaben und Eingaben, bei denen der Wert = “.”

$("#myForm :input[value][value!='.']").serialize();

Zunächst einmal kann ich es nicht mit der Jquery-Variable “this” zum Laufen bringen

$('#ofform').live('submit', function(e) {
    e.preventDefault();
    var serializedReturn = $(this :input[name!='security']).serialize();        
});

Und zweitens habe ich ein separates Formular mit der ID ofform-reset und wenn ich verwende:

var serializedReturn = $(#ofform :input[name!='security']).serialize(); 

Es nimmt die Eingaben in der anderen #ofform-reset-Form auf, UND/ODER-Eingaben, die nicht in einem Tag eingeschlossen sind.

fand die Antwort in einer meiner vorherigen Fragen. ungültiges Markup des Stils:

<form id="ofform">
 <div id="toolbar">
 <button id="save">Save</button>
</form>
<form id="ofform-reset">
 <button id="reset">Reset</button>
</form>
</div>

Jetzt müssen Sie herausfinden, wie Sie 2 verschiedene Schaltflächen verwenden, um dasselbe Formular zu steuern

Benutzer-Avatar
prodigitalson

Du brauchst die nicht :, da input ein Element und kein Pseudoselektor ist. Zweitens können Sie ein solches Objekt und eine solche Textzeichenfolge nicht in Ihrem Selektor verwenden. Sie müssen dies stattdessen als Scope-Argument für angeben $():

$('#ofform').live('submit', function(e) {
    e.preventDefault();
    var serializedReturn = $('input[name!=security]', this).serialize();        
});

  • Danke. das funktioniert. außer, dass die Serialisierung immer noch Eingaben von anderen Formularen aufnimmt. es ist, als würde alles auf der Seite serialisiert

    – Helgathewikinger

    29. Dezember 2010 um 17:47 Uhr

  • IST ein Formular in dem anderen verschachtelt? weil du das kannst. Posten Sie Ihr Markup.

    – prodigitalson

    29. Dezember 2010 um 19:34 Uhr

  • @prodigitalson Sie können kein Formular in einem anderen haben (es ist sowieso unlogisch). Oder vielleicht hast du dich in deinem Kommentar vertippt…

    – Christian

    10. Januar 2013 um 14:29 Uhr

  • @Trip: Es war nur ein Beispiel … man kann zusätzliche Elemente wie hinzufügen select und textarea oder Dinge ausschließen wie input[type=submit]… hängen davon ab, was in der Form vor sich geht.

    – prodigitalson

    4. Februar 2013 um 22:22 Uhr

  • @Ezra fügen Sie einfach Selektoren nach Bedarf hinzu. Irgendwann möchten Sie vielleicht damit beginnen, Klassen oder Datenattribute zu verwenden, um Felder zu definieren, die ausgeschlossen oder eingeschlossen werden sollen … wie auch immer Sie vorgehen möchten.

    – prodigitalson

    30. März 2015 um 16:41 Uhr

Benutzer-Avatar
jAndy

Zuerst müssen Sie die aufrufen .find() Methode wie:

var serializedReturn = $(this).find('input[name!=security]').serialize(); 

Andernfalls würde der komplette String in die CSS-Abfrage-Engine (Sizzle) gehen.

Zweitens:

Ich habe ein anderes Formular mit der ID ofform-reset und wenn ich verwende:

Sie müssen dies ändern. Es ist ungültiges Markup, mehrere IDs zu haben. Falls ich dich hier falsch verstanden habe, hilft dir vielleicht auch hier die erste Lösung weiter, indem du die aufrufst .find() Methode auch:

var serializedReturn = $('#ofform').find('input[name!=security]').serialize(); 

  • Was Ihren zweiten Punkt betrifft, bin ich mir nicht sicher, ob er das gemeint hat. Ich nehme an, er wollte einen Konjunktivsatz verwenden: “…Ich habe eine andere Form mit dem id von ‘form-reset’, und wenn ich es benutze…” Aber ich könnte mich irren.

    – David Thomas

    29. Dezember 2010 um 17:22 Uhr

  • @David: Ja, ich hatte die gleiche Idee, fügte ein paar Zeilen hinzu. Und … “er” ist wahrscheinlich eine “sie” 🙂

    – jAndy

    29. Dezember 2010 um 17:23 Uhr


  • und mein vorheriger Kommentar hätte ein weiteres Komma nach dem Wort “Form” verwenden können, um tatsächlich Sinn zu machen … =) Was meine Geschlechtsverwirrung angeht, wow. Ähm … tut mir leid, @Helga (ich habe mir deinen Namen nicht angesehen, bevor ich gepostet habe … @_@ )

    – David Thomas

    29. Dezember 2010 um 17:32 Uhr

  • keine Sorgen! aber die von Ihnen angegebene .find () -Methode nimmt immer noch die Eingaben in meinem 2. Formular auf. Das erste Formular (#ofform) hat alle Eingaben und das zweite Formular (#ofform-reset) hat die Reset-Schaltfläche – also habe ich nicht 2 Elemente mit derselben ID.

    – Helgathewikinger

    29. Dezember 2010 um 17:42 Uhr

  • Ich denke, es wird das ausgewählte Element ignorieren

    – Yogesh Karodiya

    16. Mai 2018 um 13:43 Uhr

Ich bin nicht zufrieden mit 'input[name!=security]' weil es alle anderen Eingabetypen wie ausschließt select,.. Sie können sie manuell hinzufügen, aber diese Liste wird immer länger mit neuen HTML-Tags. Mit jedem neuen Tag wird Ihr Code also erneut beschädigt.

Hier ist meine Lösung:

$form.find(':not(input[name=draft])').serialize()

oder

$('form[name=expenses] :not(input[name=draft])').serialize()

Im zweiten Beispiel ist Platz sehr wichtig.

In meiner Situation hat das gut funktioniert:

$("fieldset").not(".tasks-container").serialize()

Benutzer-Avatar
Devendra Rajput

Gelöst! Sie sollten die angegebene Lösung verwenden, um das zu serialisierende Eingabefeld auszuschließen. Es wurde getestet und mein Problem gelöst.

var formdata = $($("#myform")[0].elements).not("#field_id").serialize();

Bei mehreren Feldern können Sie den Klassennamen verwenden, um sie auszuschließen.

var formdata = $($("#myform")[0].elements).not(".class_name").serialize();

Benutzer-Avatar
Dimmduh

Sie können das Ergebnisarray filtern

var ignoreFields = ["_csrf"];

$('form')
 .serializeArray()
 .filter(function(val){
    return ignoreFields.indexOf(val.name) === -1;
 });

Oder kürzere Variante

$('form').serializeArray().filter(val => ignoreFields.indexOf(val.name) === -1)

Benutzer-Avatar
Wolfack

Versuche dies

var data = $.param($.map($("#form_name").serializeArray(), function(v,i) {
   return (v.name.includes("substring")) ? null : v;
}));

1270770cookie-checkBestimmte Eingaben beim Serialisieren ausschließen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy