Ich schreibe ein Javascript (ein Greasemonkey / Userscript), das einige Eingabefelder in ein Formular auf einer Website einfügt.
Die Sache ist, ich möchte nicht, dass diese Eingabefelder das Formular in irgendeiner Weise beeinflussen, ich möchte nicht, dass sie gesendet werden, wenn das Formular gesendet wird, ich möchte nur, dass mein Javascript Zugriff auf ihre Werte hat.
Gibt es eine Möglichkeit, einige Eingabefelder in die Mitte eines Formulars einzufügen und sie nicht senden zu lassen, wenn das Formular gesendet wird?
Natürlich wäre es ideal, wenn sich die Eingabefelder nicht im Formularelement befinden, aber ich möchte, dass im Layout meiner resultierenden Seite meine eingefügten Eingabefelder zwischen Elementen des ursprünglichen Formulars angezeigt werden.
quelle
Antworten:
Sie können Eingabefelder ohne das Attribut "Name" einfügen:
Oder Sie können sie einfach entfernen, sobald das Formular gesendet wurde (in
jQuery
):quelle
Am einfachsten wäre es, die Elemente mit dem
disabled
Attribut einzufügen .Auf diese Weise können Sie weiterhin als untergeordnete Elemente des Formulars darauf zugreifen.
Deaktivierte Felder haben den Nachteil, dass der Benutzer überhaupt nicht mit ihnen interagieren kann. Wenn Sie also ein
disabled
Textfeld haben, kann der Benutzer den Text nicht auswählen. Wenn Sie eindisabled
Kontrollkästchen haben, kann der Benutzer seinen Status nicht ändern.Sie können auch Javascript schreiben, um beim Senden des Formulars ausgelöst zu werden und die Felder zu entfernen, die Sie nicht senden möchten.
quelle
name
Grundstück weg , an dem Sie sich möglicherweise festhalten möchten, wenn Sie es später verwenden möchten.name
Attribute entfernen möchten .Einfach versuchen zu entfernen name Attribut von Eingabeelement.
Also muss es so aussehen
quelle
Ich wollte nur eine zusätzliche Option hinzufügen: Fügen Sie in Ihrer Eingabe das Formular-Tag hinzu und geben Sie den Namen eines Formulars an, das auf Ihrer Seite nicht vorhanden ist:
quelle
fakeForm
dies zu ungültigem HTML , es sei denn, Sie definieren tatsächlich an anderer Stelle (keine Übermittlung erforderlich).Sie können einen Ereignishandler schreiben
onsubmit
, der dasname
Attribut aus allen Eingabefeldern entfernt, die nicht in die Formularübermittlung aufgenommen werden sollen.Hier ist ein kurzes ungetestetes Beispiel:
quelle
Ich weiß, dass dieser Beitrag uralt ist, aber ich werde trotzdem antworten. Der einfachste / beste Weg, den ich gefunden habe, besteht darin, den Namen einfach auf leer zu setzen.
Stellen Sie dies vor Ihre Übermittlung:
Alles in allem könnte Ihre Übermittlungsfunktion folgendermaßen aussehen:
Dadurch wird das Formular weiterhin mit allen anderen Feldern gesendet, jedoch nicht ohne Namen.
quelle
Fügen Sie disabled = "disabled" in die Eingabe ein und entfernen Sie während der Abfrage das Attribut deaktiviert, wenn Sie es mit .removeAttr ('disabled') senden möchten.
HTML:
<input type="hidden" name="test" value="test" disabled='disabled'/>
jquery:
$("input[name='test']").removeAttr('disabled');
quelle
Alle oben genannten Antworten sagten bereits alles über das (Nicht-) Benennen der Formularsteuerelemente oder das programmgesteuerte Entfernen aus, bevor Sie Ihr Formular tatsächlich abschicken.
Während meiner Recherche habe ich jedoch eine andere Lösung gefunden, die ich in diesem Beitrag nicht erwähnt habe:
Wenn Sie die Formularsteuerelemente kapseln, möchten Sie unverarbeitet / nicht gesendet werden, in einem anderen
<form>
Tag ohnemethod
Attribut nochpath
(und offensichtlich ohne Steuerelement für den Übermittlungstyp) Wie eine Schaltfläche oder eine darin verschachtelte Eingabe) enthält das Senden des übergeordneten Formulars nicht die gekapselten Formularsteuerelemente.Der Steuerwert [name = "notSent"] wird weder verarbeitet noch an den POST-Endpunkt des Servers gesendet, der von [name = "sent"] jedoch.
Diese Lösung mag anekdotisch sein, aber ich überlasse sie immer noch der Nachwelt ...
quelle
Behandeln Sie das Senden des Formulars in einer Funktion über onSubmit () und führen Sie die folgenden Schritte aus, um das Formularelement zu entfernen: Verwenden Sie
getElementById()
das DOM und verwenden Sie dann[object].parentNode.removeChild([object])
Angenommen, Ihr fragliches Feld hat den ID-Attributcode "my_removable_field":
So erhalten Sie genau das, wonach Sie suchen.
quelle
Müssen sie überhaupt als Eingabeelemente dienen? Sie können Javascript verwenden, um dynamisch Divs oder Absätze oder Listenelemente oder was auch immer zu erstellen, die die Informationen enthalten, die Sie präsentieren möchten.
Wenn das interaktive Element jedoch wichtig ist und es schwierig ist, diese Elemente außerhalb des
<form>
Blocks zu platzieren, sollte es möglich sein, diese Elemente aus dem Formular zu entfernen, wenn die Seite gesendet wird.quelle
quelle
Sie müssen onsubmit in Ihrem Formular hinzufügen:
Und das Skript wird so aussehen:
Das funktioniert bei mir jedes Mal :)
quelle