Soumettez un formulaire en utilisant jQuery [fermé]

476

Je souhaite soumettre un formulaire à l'aide de jQuery. Quelqu'un peut-il fournir le code, une démo ou un exemple de lien?

mehul
la source

Réponses:

482

Cela dépend si vous soumettez le formulaire normalement ou via un appel AJAX. Vous pouvez trouver de nombreuses informations sur jquery.com , y compris de la documentation avec des exemples. Pour soumettre un formulaire normalement, consultez la submit()méthode sur ce site. Pour AJAX , il existe de nombreuses possibilités différentes, bien que vous souhaitiez probablement utiliser les méthodes ajax()ou post(). Notez que post()c'est vraiment juste un moyen pratique d'appeler la ajax()méthode avec une interface simplifiée et limitée.

Une ressource critique, que j'utilise tous les jours, que vous devriez mettre en signet est Comment fonctionne jQuery . Il contient des tutoriels sur l'utilisation de jQuery et la navigation de gauche donne accès à toute la documentation.

Exemples:

Ordinaire

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

Notez que les méthodes ajax()et post()ci-dessus sont équivalentes. Il existe des paramètres supplémentaires que vous pouvez ajouter à la ajax()demande pour gérer les erreurs, etc.

tvanfosson
la source
3
Je manquais la méthode de sérialisation. Évidemment, j'ai regardé jQuery.com, mais leurs documents décrivent $.postet reconstruisent explicitement le formulaire pour générer des données à soumettre. Merci!
nomen
1
si j'ai des données prêtes que je souhaite ajouter à la demande de publication (pas ajax, formulaire soumettre la demande de publication) avant de soumettre, comment faire?
ア レ ッ ク ス
1
@AlexanderSupertramp - dans l'exemple ci-dessus, les données sont envoyées en tant que paramètres de formulaire encodés en URL. Vous pouvez simplement ajouter les données en tant que paramètres de formulaire supplémentaires. $('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData. Remarque: les deux derniers peuvent avoir besoin d'être encodés en url à l'aide de encodeURIComponent(). OU - vous pouvez changer pour utiliser le codage JSON aux deux extrémités, mais vous devez ensuite placer les données du formulaire dans une structure de données JavaScript avec vos données supplémentaires et les sérialiser. Dans ce cas, vous utiliseriez probablement serializeArrayle formulaire et fusionneriez vos autres données.
tvanfosson
"J'attends une réponse json" a résolu un problème différent pour moi (re: échec des appels à Flask).
scharfmn
Si vous avez un bouton d'envoi nommé «soumettre», cela échouera discrètement (jQuery) ou produira une erreur indiquant «soumettre n'est pas une fonction» (vanilla js). Renommer le bouton en autre chose résoudra . ¯_ (ツ) _ / ¯ 🤷
fzzylogic
122

Vous devrez utiliser $("#formId").submit().

Vous appelez généralement cela à partir d'une fonction.

Par exemple:

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

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

Vous pouvez obtenir plus d'informations à ce sujet sur le site Web de Jquery .

Draco
la source
55
Si vous utilisez jQuery, pourquoi utiliseriez-vous un attribut onclick en ligne?
nnnnnn
3
@BradleyFlood - Comment aurait-il pu le faire à la place? Les débutants comme nous aimeraient savoir?
MarcoZen
2
@MarcoZen Je pense que BradleyFlood faisait remarquer que l'expression "Par exemple:" signifie que l'utilisation de l'attribut onclick en ligne n'est qu'une des nombreuses manières possibles. En effet, plus de type jQuery utiliserait .on ('click', submitDetailsForm).
Jan Kukacka
@JanKukacka - Noté. Merci.
MarcoZen
71

lorsque vous avez un formulaire existant, cela devrait maintenant fonctionner avec jquery - ajax / post maintenant vous pouvez:

  • Accrochez-vous à la soumission - événement de votre formulaire
  • empêcher la fonctionnalité par défaut de soumettre
  • faites vos propres trucs

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

Veuillez noter que pour que la serialize()fonction fonctionne dans l'exemple ci-dessus, tous les éléments du formulaire doivent avoir leur nameattribut défini.

Exemple de formulaire:

<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 - les données sont soumises à l'aide de POST dans cet exemple, ce qui signifie que vous pouvez accéder à vos données via

 $_POST['dataproperty1'] 

, où dataproperty1 est un "nom de variable" dans votre json.

voici un exemple de syntaxe si vous utilisez CodeIgniter:

 $pdata = $this->input->post();
 $prop1 = $pdata['prop1'];
 $prop1 = $pdata['prop2'];
womd
la source
Pourquoi réutilisez-vous le sélecteur de formulaire, pourquoi ne pas réutiliser l'élément de formulaire lui-même?
Slava Fomin II
oui, vous pouvez faire comme ça aussi: <form id = "myform" onsubmit = "do_stuff ()">, mais si le js est chargé plus tard / différé, cette fonction peut ne pas être disponible .. j'ai donc pensé à l'initialiser sur le document. prêt .... je ne sais pas si je suis sur la même pensée, pouvez-vous illustrer ce que vous faites?
womd
1
Merci d'avoir souligné que l'attribut "nom" doit être défini
ccalboni
1
Le dataType: 'application / json' est une erreur. Devrait lire dataType: 'json'. Vous obtiendrez des erreurs d'analyse s'il est laissé comme dans l'exemple ci-dessus.
Hankster
@Hankster oui, était json mais a été édité ... Hollander pouvez-vous vérifier / confirmer?
womd
68

Dans jQuery, je préférerais ce qui suit:

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

Mais là encore, vous n'avez vraiment pas besoin de jQuery pour effectuer cette tâche - utilisez simplement du JavaScript normal:

document.getElementById("form-id").submit()
gernberg
la source
1
@windmaomao avez-vous inclus jQuery sur votre page Web? Il se peut que vous deviez utiliser jQuery au lieu de $ aswell, cependant - je recommande d'utiliser la solution JS régulière à moins que vous n'ayez déjà inclus jQuery.
gernberg
1
@windmaomao J'ai eu le même problème. Mon jQuery a exécuté toutes les autres fonctions, mais n'a pas envoyé le formulaire. Cela a fonctionné en utilisant simplement la méthode document.getElementById.
ChallengeAccepté
41

Tiré du manuel: jQuery Doc

$("form:first").submit();
AdamSane
la source
3
Il est préférable de soumettre le formulaire par "id" que de trouver le premier formulaire et de le soumettre. Cependant, cela fonctionnera parfaitement s'il n'y a qu'un seul formulaire à la fois.
Chintan Thummar
22

Pour information
si quelqu'un utilise

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

Ne pas quelque chose comme ça

<button name = "submit">

Il m'a fallu plusieurs heures pour découvrir que submit () ne fonctionnerait pas ainsi.

AZ Soft
la source
1
La faute de frappe sur le mot clé ne "sumit"permet pas de savoir si la faute de frappe n'est pas intentionnelle dans la réponse ou si elle était liée au problème. Voulez-vous dire qu'un bouton nommé "submit"gâche le formulaire jquery submit ()? Ou voulez-vous dire que le problème était que vous avez donné le nom du bouton soumettre au lieu de la norme type="submit"?
Daryn
mon intention n'était pas de répondre à cette question mais de dire à ceux qui étaient confrontés à ce problème. Je pense que le problème est avec le nom du bouton sans type défini, car j'ai utilisé l'événement onclick pour vérifier certaines entrées avant de les soumettre. Si type = soumettre, le formulaire est soumis sans mon événement onclick.
AZ Soft
16

Utilisez-le pour soumettre votre formulaire en utilisant jquery. Voici le lien 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
la source
2
Bien qu'il s'agisse d'un ancien article, il vaut la peine d'ajouter un type buttonà votre bouton pour garantir que le formulaire ne sera pas envoyé (car tous les navigateurs ne traitent pas les boutons sans type de la même manière).
Mikey
@Mikey Merci pour la suggestion.
Chintan Thummar
14

cela enverra un formulaire avec préchargeur:

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

j'ai une astuce pour faire un post de données de formulaire réformé avec une méthode aléatoire http://www.jackart4.com/article.html

jacky
la source
pourriez-vous publier le lien mis à jour? Le lien ci-dessus ne fonctionne plus.
Chris22
12

Notez que si vous avez déjà installé un écouteur d'événement submit pour votre formulaire, l'appel interne à submit ()

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

ne fonctionnera pas car il essaie d'installer un nouvel écouteur d'événements pour l'événement d'envoi de ce formulaire (qui échoue). Vous devez donc accéder à l'élément HTML lui-même (décompresser de jQquery) et appeler directement submit () sur cet élément:

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

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

            **OR**

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

Notez que dans Internet Explorer, il existe des problèmes avec les formulaires créés dynamiquement. Un formulaire créé comme celui-ci ne sera pas soumis dans IE (9):

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

Pour le faire fonctionner dans IE, créez l'élément de formulaire et attachez-le avant de le soumettre comme ceci:

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

Créer le formulaire comme dans l'exemple 1, puis le joindre ne fonctionnera pas - dans IE9, il génère une erreur JScript DOM Exception: HIERARCHY_REQUEST_ERR (3)

Accessoires à Tommy W @ https://stackoverflow.com/a/6694054/694325

Nenotlep
la source
7

Jusqu'à présent, les solutions nécessitent que vous connaissiez l'ID du formulaire.

Utilisez ce code pour soumettre le formulaire sans avoir besoin de connaître l'ID:

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

Par exemple, si vous souhaitez gérer l'événement de clic pour un bouton, vous pouvez utiliser

$("#buttonID").click(function() {
    handleForm(this);    
});
muzzamo
la source
6

Si le bouton est situé entre les balises du formulaire, je préfère cette version:

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

vous pouvez l'utiliser comme ceci:

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

OU

document.formName.submit();
Ram Ch. Bachkheti
la source
4

Astuce IE pour les formulaires dynamiques:

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

Mon approche légèrement différente Changez le bouton en bouton de soumission, puis cliquez sur

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

Il affichera les données du formulaire sur votre nom de fichier donné via AJAX.

kdniazi
la source
1

Je recommande une solution générique pour que vous n'ayez pas à ajouter le code pour chaque formulaire. Utilisez le plugin de formulaire jquery (http://jquery.malsup.com/form/) et ajoutez ce code.

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

});
danidacar
la source
1

vous pouvez le faire comme ceci:

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

J'ai également utilisé ce qui suit pour soumettre un formulaire (sans le soumettre) via Ajax:

  jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
    function() {
      alert("Okay!"); 
    });
brian newman
la source
3
cela ne ressemble en rien à un submit (). pour une chose, submit () utilise la sémantique POST, vous utilisez un GET
Scott Evernden