Senden Sie ein Formular mit jQuery [geschlossen]

476

Ich möchte ein Formular mit jQuery senden. Kann jemand den Code, eine Demo oder einen Beispiellink bereitstellen?

mehul
quelle

Antworten:

482

Dies hängt davon ab, ob Sie das Formular normal oder über einen AJAX-Anruf senden. Unter jquery.com finden Sie viele Informationen , einschließlich Dokumentation mit Beispielen. Wenn Sie ein Formular normal senden möchten, überprüfen Sie die submit()Methode an dieser Site. Für AJAX gibt es viele verschiedene Möglichkeiten, obwohl Sie wahrscheinlich entweder die ajax()oder post()Methoden verwenden möchten . Beachten Sie, dass dies post()nur eine bequeme Möglichkeit ist, die ajax()Methode mit einer vereinfachten und eingeschränkten Schnittstelle aufzurufen .

Eine wichtige Ressource, die ich jeden Tag benutze und die Sie als Lesezeichen speichern sollten, ist die Funktionsweise von jQuery . Es enthält Tutorials zur Verwendung von jQuery und die Navigation auf der linken Seite bietet Zugriff auf die gesamte Dokumentation.

Beispiele:

Normal

$('form#myForm').submit();

AJAX

$('input#submitButton').click( function() {
    $.post( 'some-url', $('form#myForm').serialize(), function(data) {
         // ... do something with response from server
       },
       'json' // I expect a JSON response
    );
});

$('input#submitButton').click( function() {
    $.ajax({
        url: 'some-url',
        type: 'post',
        dataType: 'json',
        data: $('form#myForm').serialize(),
        success: function(data) {
                   // ... do something with the data...
                 }
    });
});

Beachten Sie, dass die ajax()undpost() obigen Methoden äquivalent sind. Es gibt zusätzliche Parameter, die Sie der ajax()Anforderung hinzufügen können , um Fehler usw. zu behandeln.

Tvanfosson
quelle
3
Mir fehlte die Serialisierungsmethode. Natürlich habe ich mir jQuery.com angesehen, aber ihre Dokumente zum $.postexpliziten Dekonstruieren und Rekonstruieren des Formulars , um zu sendende Daten zu generieren. Vielen Dank!
Nomen
1
Wenn ich einige Daten bereit habe, die ich vor dem Absenden zur Post-Anfrage hinzufügen möchte (nicht Ajax, Formular Submit-Post-Anfrage), wie mache ich das?
ス レ ッ ク ス
1
@AlexanderSupertramp - Im obigen Beispiel werden die Daten als URL-codierte Formularparameter gesendet. Sie können die Daten einfach als zusätzliche Formularparameter anhängen. $('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData. Hinweis: Die beiden letzteren müssen möglicherweise mit der URL codiert werden encodeURIComponent(). ODER - Sie können die JSON-Codierung an beiden Enden verwenden, müssen dann jedoch die Formulardaten mit Ihren zusätzlichen Daten in eine JavaScript-Datenstruktur einfügen und serialisieren. In diesem Fall würden Sie wahrscheinlich serializeArrayauf dem Formular verwenden und Ihre anderen Daten in.
Tvanfosson
"Ich erwarte eine json-Antwort" löste ein anderes Problem für mich (bezüglich: Anrufe bei Flask schlagen fehl).
scharfmn
Wenn Sie eine Senden-Schaltfläche mit dem Namen "Senden" haben, schlägt dies entweder leise fehl (jQuery) oder es wird der Fehler "Senden ist keine Funktion" (vanilla js) ausgegeben. Das Umbenennen der Schaltfläche in etwas anderes wird behoben . ¯_ (ツ) _ / ¯ 🤷
fzzylogic
122

Sie müssen verwenden $("#formId").submit() .

Sie würden dies im Allgemeinen innerhalb einer Funktion aufrufen.

Zum Beispiel:

<input type='button' value='Submit form' onClick='submitDetailsForm()' />

<script language="javascript" type="text/javascript">
    function submitDetailsForm() {
       $("#formId").submit();
    }
</script>

Weitere Informationen hierzu finden Sie auf der Jquery-Website .

Draco
quelle
55
Wenn Sie jQuery verwenden, warum sollten Sie ein Inline-Onclick-Attribut verwenden?
nnnnnn
3
@BradleyFlood - Wie hätte er es stattdessen tun sollen? Neulinge wie wir möchten es wissen?
MarcoZen
2
@MarcoZen Ich denke, BradleyFlood hat darauf hingewiesen, dass der Ausdruck "Zum Beispiel:" bedeutet, dass die Verwendung des Inline-Onclick-Attributs nur eine von mehreren Möglichkeiten ist. In der Tat würde jQuery-ähnlicher .on verwenden ('click', submitDetailsForm).
Jan Kukacka
@ JanKukacka - Noted. Vielen Dank.
MarcoZen
71

Wenn Sie ein vorhandenes Formular haben, sollte dies jetzt mit jquery - ajax / post funktionieren. Jetzt können Sie:

  • Hängen Sie sich an das Submit-Ereignis Ihres Formulars
  • Verhindern Sie die Standardfunktionalität von Submit
  • mach deine eigenen Sachen

    $(function() {
        //hang on event of form with id=myform
        $("#myform").submit(function(e) {
    
            //prevent Default functionality
            e.preventDefault();
    
            //get the action-url of the form
            var actionurl = e.currentTarget.action;
    
            //do your own request an handle the results
            $.ajax({
                    url: actionurl,
                    type: 'post',
                    dataType: 'application/json',
                    data: $("#myform").serialize(),
                    success: function(data) {
                        ... do something with the data...
                    }
            });
    
        });
    
    });

Bitte beachten Sie, dass serialize()alle Formularelemente ihre haben müssen, damit die Funktion im obigen Beispiel funktioniertname Attribut definiert sein .

Beispiel des Formulars:

<form id="myform" method="post" action="http://example.com/do_recieve_request">

<input type="text" size="20" value="default value" name="my_input_field">
..
.
</form>

@PtF - Die Daten werden in diesem Beispiel mithilfe von POST übermittelt. Dies bedeutet, dass Sie über auf Ihre Daten zugreifen können

 $_POST['dataproperty1'] 

, wobei dataproperty1 ein "Variablenname" in Ihrem json ist.

Hier Beispielsyntax, wenn Sie CodeIgniter verwenden:

 $pdata = $this->input->post();
 $prop1 = $pdata['prop1'];
 $prop1 = $pdata['prop2'];
Frau
quelle
Warum verwenden Sie den Selektor des Formulars wieder, warum nicht das Formularelement selbst wiederverwenden?
Slava Fomin II
Ja, Sie könnten auch so vorgehen: <form id = "myform" onsubmit = "do_stuff ()">, aber wenn das js später geladen / verzögert wird, ist diese Funktion möglicherweise nicht verfügbar. Deshalb dachte ich, dies im Dokument zu initialisieren. fertig .... ich bin mir nicht sicher, ob ich auf dem gleichen Gedanken bin, kannst du veranschaulichen, was du vorhast?
Frau
1
Vielen Dank für die Hervorhebung, dass "Name" -Attribut definiert werden muss
ccalboni
1
Der Datentyp: 'application / json' ist ein Fehler. Sollte dataType lauten: 'json'. Sie erhalten Analysefehler, wenn Sie wie im obigen Beispiel belassen.
Hankster
@Hankster ja, war json aber wurde bearbeitet ... Hollander kannst du das überprüfen / bestätigen?
Frau
68

In jQuery würde ich Folgendes bevorzugen:

$("#form-id").submit()

Andererseits benötigen Sie jQuery wirklich nicht, um diese Aufgabe auszuführen - verwenden Sie einfach reguläres JavaScript:

document.getElementById("form-id").submit()
gernberg
quelle
1
@windmaomao hast du jQuery auf deiner Webseite aufgenommen? Es kann jedoch sein, dass Sie jQuery anstelle von $ verwenden müssen. Ich empfehle jedoch die Verwendung der regulären JS-Lösung, es sei denn, Sie haben jQuery bereits enthalten.
gernberg
1
@windmaomao Ich hatte das gleiche Problem. Meine jQuery hat alle anderen Funktionen ausgeführt, das Formular jedoch nicht gesendet. Es funktionierte nur mit der document.getElementById-Methode.
ChallengeAccepted
41

Aus dem Handbuch: jQuery Doc

$("form:first").submit();
AdamSane
quelle
3
Es ist schwierig, ein Formular mit "id" einzureichen, als das erste Formular zu finden und einzureichen. Es funktioniert jedoch einwandfrei, wenn jeweils nur ein Formular vorhanden ist.
Chintan Thummar
22

Zur Information,
wenn jemand verwendet

$('#formId').submit();

Mach so etwas nicht

<button name = "submit">

Es hat viele Stunden gedauert, bis ich herausgefunden habe, dass submit () so nicht funktioniert.

AZ Soft
quelle
1
"sumit"Tippfehler bei Schlüsselwörtern machen unklar, ob der Tippfehler in der Antwort unbeabsichtigt ist oder mit dem Problem zusammenhängt. "submit"Meinen Sie damit, dass eine Schaltfläche mit dem Namen jquery form submit () durcheinander bringt? Oder meinst du, das Problem war, dass du den Button- Namen anstelle des Standards übermittelt hast type="submit"?
Daryn
Ich wollte diese Frage nicht beantworten, sondern denjenigen erzählen, die mit diesem Problem konfrontiert waren. Ich denke, das Problem liegt beim Schaltflächennamen ohne definierten Typ, da ich das Ereignis onclick verwendet habe, um einige Eingaben vor dem Senden zu überprüfen. Wenn type = submit, dann form submit ohne mein onclick event fire.
AZ Soft
16

Verwenden Sie es, um Ihr Formular mit jquery zu senden. Hier ist der Link http://api.jquery.com/submit/

<form id="form" method="post" action="#">
    <input type="text" id="input">
    <input type="button" id="button" value="Submit">
</form>

<script type="text/javascript">
$(document).ready(function () {
    $( "#button" ).click(function() {
        $( "#form" ).submit();
    });
});
</script>
Chintan Thummar
quelle
2
Obwohl dies ein alter Beitrag ist, lohnt es sich button, Ihrer Schaltfläche einen Typ hinzuzufügen , um sicherzustellen, dass das Formular nicht gesendet wird (da nicht alle Browser Schaltflächen ohne Typ gleich behandeln).
Mikey
@ Mikey Danke für den Vorschlag.
Chintan Thummar
14

Dadurch wird ein Formular mit Preloader gesendet:

var a=$('#yourform').serialize();
$.ajax({
    type:'post',
    url:'receiver url',
    data:a,
    beforeSend:function(){
        launchpreloader();
    },
    complete:function(){
        stopPreloader();
    },
    success:function(result){
         alert(result);
    }
});

Ich habe einen Trick, um einen Formulardatenbeitrag mit der Zufallsmethode http://www.jackart4.com/article.html zu reformieren

Jacky
quelle
Könntest du den aktualisierten Link posten? Der obige Link funktioniert nicht mehr.
Chris22
12

Beachten Sie, dass, wenn Sie bereits einen Listener für Übermittlungsereignisse für Ihr Formular installiert haben, der innner Aufruf von submit ()

jQuery('#<form-id>').submit( function(e){ 
    e.preventDefault();
    // maybe some validation in here
    if ( <form-is-valid> ) jQuery('#<form-id>').submit();
});

funktioniert nicht , da versucht wird, einen neuen Ereignis-Listener für das Übermittlungsereignis dieses Formulars zu installieren (was fehlschlägt). Sie müssen also auf das HTML-Element selbst zugreifen (aus jQquery auspacken) und submit () für dieses Element direkt aufrufen:

    jQuery('#<form-id>').submit( function(e){ 
      e.preventDefault();
      // note the [0] array access:
      if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
    });
Gutschilla
quelle
7
jQuery("a[id=atag]").click( function(){

    jQuery('#form-id').submit();      

            **OR**

    jQuery(this).parents("#form-id").submit();
});
GKumar00
quelle
7

Beachten Sie, dass in Internet Explorer Probleme mit dynamisch erstellten Formularen auftreten. Ein so erstelltes Formular wird in IE (9) nicht gesendet:

var form = $('<form method="post" action="/test/Delete/">' +
             '<input type="hidden" name="id" value="' + myid + '"></form>');
$(form).submit();

Um es im IE zum Laufen zu bringen, erstellen Sie das Formularelement und hängen Sie es an, bevor Sie es wie folgt senden:

var form = document.createElement("form");
$(form).attr("action", "/test/Delete")
       .attr("method", "post");
$(form).html('<input type="hidden" name="id" value="' + myid + '" />');
document.body.appendChild(form);
$(form).submit();
document.body.removeChild(form);

Das Erstellen des Formulars wie in Beispiel 1 und das anschließende Anhängen funktioniert nicht - in IE9 wird ein JScript-Fehler ausgegeben DOM Exception: HIERARCHY_REQUEST_ERR (3)

Requisiten an Tommy W @ https://stackoverflow.com/a/6694054/694325

Nenotlep
quelle
7

Für die bisherigen Lösungen müssen Sie die ID des Formulars kennen.

Verwenden Sie diesen Code, um das Formular zu senden, ohne die ID kennen zu müssen:

function handleForm(field) {
    $(field).closest("form").submit();
}

Wenn Sie beispielsweise das Klickereignis für eine Schaltfläche behandeln möchten, können Sie es verwenden

$("#buttonID").click(function() {
    handleForm(this);    
});
Maulkorb
quelle
6

Wenn sich die Schaltfläche zwischen den Formular-Tags befindet, bevorzuge ich diese Version:

$('.my-button').click(function (event) {
    var $target = $( event.target );
    $target.closest("form").submit();
});
Tk421
quelle
4

Sie könnten es so verwenden:

  $('#formId').submit();

ODER

document.formName.submit();
Ram Ch. Bachkheti
quelle
4

IE-Trick für dynamische Formulare:

$('#someform').find('input,select,textarea').serialize();
user2320873
quelle
3

Mein Ansatz etwas anders Ändern Sie die Schaltfläche in die Schaltfläche "Senden" und klicken Sie dann auf

$("#submit").click(function(event) {
$(this).attr('type','submit');
$(this).click();
});
NaveenDA
quelle
2
function  form_submit(form_id,filename){
    $.post(filename,$("#"+form_id).serialize(), function(data){
        alert(data);
    });
}

Die Formulardaten werden über AJAX auf Ihrem angegebenen Dateinamen veröffentlicht.

kdniazi
quelle
1

Ich empfehle eine generische Lösung, damit Sie den Code nicht für jedes Formular hinzufügen müssen. Verwenden Sie das Plugin für das jquery-Formular (http://jquery.malsup.com/form/) und fügen Sie diesen Code hinzu.

$(function(){
$('form.ajax_submit').submit(function() {
    $(this).ajaxSubmit();
            //validation and other stuff
        return false; 
});

});
Danidacar
quelle
1

Sie könnten es so machen:

$('#myform').bind('submit', function(){ ... });
vdegenne
quelle
-2

Ich habe auch Folgendes verwendet, um ein Formular (ohne es tatsächlich einzureichen) über Ajax einzureichen:

  jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
    function() {
      alert("Okay!"); 
    });
Brian Newman
quelle
3
Dies ist nichts wie ein submit (). Zum einen verwendet submit () die POST-Semantik, Sie verwenden ein GET
Scott Evernden