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?

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.


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 .


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'];

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()

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();

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.


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>

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


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();
    });


7
jQuery("a[id=atag]").click( function(){

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

            **OR**

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

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


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);    
});

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();
});


4

IE-Trick für dynamische Formulare:

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

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();
});

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.


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; 
});

});

1

Sie könnten es so machen:

$('#myform').bind('submit', function(){ ... });

-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!"); 
    });

3
Dies ist nichts wie ein submit (). Zum einen verwendet submit () die POST-Semantik, Sie verwenden ein GET
Scott Evernden
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.