Gibt es in jQuery eine Möglichkeit, ein Formular im laufenden Betrieb zu erstellen und zu senden?
So etwas wie unten.
<html>
<head>
<title> Title Text Goes Here </title>
<script src="http://code.jquery.com/jquery-1.7.js"></script>
<script>
$(document).ready(function(){alert('hi')});
$('<form/>').attr('action','form2.html').submit();
</script>
</head>
<body>
Content Area
</body>
</html>
Soll das funktionieren oder gibt es einen anderen Weg, dies zu tun?
javascript
jquery
forms
submit
Santosh Gokak
quelle
quelle
Antworten:
Es gab zwei Probleme mit Ihrem Code. Das erste ist, dass Sie
$(document).ready();
das jQuery-Objekt, das das Element erstellt , eingeschlossen haben , es aber nicht umbrochen haben.Die zweite war die Methode, die Sie verwendeten. jQuery erstellt jedes Element, wenn der Selektor (oder wo Sie normalerweise den Selektor platzieren würden) durch das Element ersetzt wird, das Sie erstellen möchten. Dann hängen Sie es einfach an den Körper an und reichen es ein.
$(document).ready(function(){ $('<form action="form2.html"></form>').appendTo('body').submit(); });
Hier ist der Code in Aktion. In diesem Beispiel wird nicht automatisch gesendet, nur um zu beweisen, dass das Formularelement hinzugefügt wird.
Hier ist der Code mit automatischer Übermittlung. Es klappt gut. Jsfiddle führt Sie zu einer 404-Seite, da "form2.html" offensichtlich nicht auf dem Server vorhanden ist.
quelle
$(document).ready()
Block aufzunehmen - es stellt sicher, dass der Browser sicher Änderungen am DOM vornehmen kann. Andernfalls spucken wählerische Browser wie IE6 / 7 den Dummy aus, wenn Sie versuchen, etwas zu ändern, bevor die gesamte Seite geladen wurde.Ja, es ist möglich. Eine der Lösungen ist unten ( jsfiddle als Beweis ).
HTML:
<a id="fire" href="#" title="submit form">Submit form</a>
(siehe oben gibt es keine Form)
JavaScript:
jQuery('#fire').click(function(event){ event.preventDefault(); var newForm = jQuery('<form>', { 'action': 'http://www.google.com/search', 'target': '_top' }).append(jQuery('<input>', { 'name': 'q', 'value': 'stack overflow', 'type': 'hidden' })); newForm.submit(); });
Das obige Beispiel zeigt Ihnen, wie Sie ein Formular erstellen, Eingaben hinzufügen und senden. Manchmal Anzeige des Ergebnisses ist verboten , durch
X-Frame-Options
, so habe ich festgelegttarget
auf_top
, die das Hauptfenster der Inhalt ersetzt. Wenn Sie dies festlegen_blank
, kann es alternativ in einem neuen Fenster / einer neuen Registerkarte angezeigt werden.quelle
submit()
Aufruf. Ich habe absichtlich Code zum Erstellen langer Formulare bereitgestellt, um zu zeigen, wie das Formular und seine Elemente erstellt werden. Ich glaube das ist ganz ok.'method': post
zu erreichen.Seine My-Version ohne jQuery, einfache Funktion kann im laufenden Betrieb verwendet werden
Funktion:
function post_to_url(path, params, method) { method = method || "post"; var form = document.createElement("form"); form.setAttribute("method", method); form.setAttribute("action", path); for(var key in params) { if(params.hasOwnProperty(key)) { var hiddenField = document.createElement("input"); hiddenField.setAttribute("type", "hidden"); hiddenField.setAttribute("name", key); hiddenField.setAttribute("value", params[key]); form.appendChild(hiddenField); } } document.body.appendChild(form); form.submit(); }
Verwendung:
post_to_url('fullurlpath', { field1:'value1', field2:'value2' }, 'post');
quelle
Wie Purmou, aber das Entfernen des Formulars beim Absenden erfolgt.
$(function() { $('<form action="form2.html"></form>').appendTo('body').submit().remove(); });
quelle
Ja, du hast gerade die Zitate vergessen ...
$('<form/>').attr('action','form2.html').submit();
quelle
<body>
bevor es funktioniert.Josepmra Beispiel funktioniert gut für das, was ich brauche. Aber ich musste die Zeile hinzufügen
form.appendTo( document.body )
damit es funktioniert.
var form = $(document.createElement('form')); $(form).attr("action", "reserves.php"); $(form).attr("method", "POST"); var input = $("<input>") .attr("type", "hidden") .attr("name", "mydata") .val("bla" ); $(form).append($(input)); form.appendTo( document.body ) $(form).submit();
quelle
Versuchen Sie es mit diesem Code -
Es ist eine völlig dynamische Lösung:
var form = $(document.createElement('form')); $(form).attr("action", "reserves.php"); $(form).attr("method", "POST"); var input = $("<input>").attr("type", "hidden").attr("name", "mydata").val("bla"); $(form).append($(input)); $(form).submit();
quelle
Warum nicht du
$.post
oder$.get
direkt?GET
Anfragen:POST
Anfragen:Dann brauchen Sie kein Formular, senden Sie einfach die Daten in Ihrem Datenobjekt.
$.post("form2.html", {myField: "some value"}, function(){ alert("done!"); });
quelle
Content-Disposition: Attachment;
, um den Download zu erzwingen.Content-Type: application/octet-stream;
. Es gibt auch dasdownload
Attribut in Ankern ... clientseitige Sache ( davidwalsh.name/download-attribute )Angenommen, Sie möchten ein Formular mit einigen Parametern erstellen und einen POST-Aufruf durchführen
var param1 = 10; $('<form action="./your_target.html" method="POST">' + '<input type="hidden" name="param" value="' + param + '" />' + '</form>').appendTo('body').submit();
Sie können alles auch in einer Zeile erledigen, wenn Sie dies wünschen :-)
quelle