146 votes

Comment puis-je écouter l'événement de soumission du formulaire en javascript ?

Je veux écrire ma propre bibliothèque javascript de validation de formulaire et j'ai cherché sur google comment détecter si un bouton submit est cliqué mais tout ce que j'ai trouvé c'est du code où il faut utiliser onClick sur onSubmit="function()" en html.

Je voudrais faire ce javascript pour ne pas avoir à toucher au code html comme ajouter le javascript onSubmit ou onClick.

11 votes

Pourquoi pas ? document.forms['yourForm'].onsubmit = function(){} ? Ou addEventListener ?

3 votes

Voulez-vous vraiment vérifier si le bouton d'envoi a été cliqué, ou voulez-vous vérifier quand l'utilisateur soumet le formulaire (ce qu'il peut faire en cliquant sur le bouton ou en appuyant sur Entrée dans l'un des champs) ?

572voto

Derek 朕會功夫 Points 23487

Pourquoi les gens utilisent-ils toujours jQuery alors que ce n'est pas nécessaire ?
Pourquoi les gens ne peuvent-ils pas utiliser un simple JavaScript ?

var ele = /*Your Form Element*/;
if(ele.addEventListener){
    ele.addEventListener("submit", callback, false);  //Modern browsers
}else if(ele.attachEvent){
    ele.attachEvent('onsubmit', callback);            //Old IE
}

callback est une fonction que vous voulez appeler lorsque le formulaire est soumis.

À propos de EventTarget.addEventListener , consultez cette documentation sur MDN .

Pour annuler le natif submit (empêcher l'envoi du formulaire), utilisez l'événement .preventDefault() dans votre fonction de rappel,

document.querySelector("#myForm").addEventListener("submit", function(e){
    if(!isValid){
        e.preventDefault();    //stop form from submitting
    }
});

À l'écoute de la submit événement avec des bibliothèques

Si, pour une raison ou une autre, vous avez décidé qu'une bibliothèque est nécessaire (vous en utilisez déjà une ou vous ne voulez pas vous occuper des problèmes liés aux navigateurs croisés), voici une liste des moyens d'écouter l'événement submit dans les bibliothèques courantes :

  1. jQuery

    $(ele).submit(callback);

    ele est la référence de l'élément de formulaire, et callback étant la référence de la fonction de rappel. Référence

    <iframe width="100%" height="100%" src="http://jsfiddle.net/DerekL/wnbo1hq0/show" frameborder="0"></iframe>
  2. AngularJS (1.x)

    <form ng-submit="callback()">
    
    $scope.callback = function(){ /*...*/ };

    Très simple, où $scope est la portée fournie par le cadre à l'intérieur de votre contrôleur . Référence

  3. React

    <form onSubmit={this.handleSubmit}>
    
    class YourComponent extends Component {
        // stuff
    
        handleSubmit(event) {
            // do whatever you need here
    
            // if you need to stop the submit event and 
            // perform/dispatch your own actions
            event.preventDefault();
        }
    
        // more stuff
    }

    Il suffit de passer un gestionnaire à la onSubmit prop. Référence

  4. Autres frameworks/bibliothèques

    Reportez-vous à la documentation de votre framework.


Validation

Vous pouvez toujours faire votre validation en JavaScript, mais avec HTML5, nous avons aussi la validation native.

<!-- Must be a 5 digit number -->
<input type="number" required pattern="\d{5}">

Vous n'avez même pas besoin de JavaScript ! Lorsque la validation native n'est pas prise en charge, vous pouvez vous rabattre sur un validateur JavaScript.

Démonstration : http://jsfiddle.net/DerekL/L23wmo1L/

108 votes

Ces 5 lignes de code "affreusement... laid" remplacent la fonctionnalité requise fournie par 4 000 lignes de jQuery, qui doit également être un code "affreusement... laid".

48 votes

Je n'ai pas grand chose contre jQuery, seulement contre ceux qui l'utilisent comme une sorte d'incantation magique sans se rendre compte qu'ils peuvent tout remplacer avec quelques lignes de code. Pourquoi ne pas prendre le temps de découvrir le fonctionnement des navigateurs ? Ce n'est vraiment pas si difficile.

4 votes

@Ben - et ce n'est pas parce que vous pouvez faire quelque chose avec une bibliothèque que vous devez le faire, ni que les autres doivent être dissuadés d'apprendre les bases par des réponses du type "utilisez simplement la bibliothèque x". Lorsque quelqu'un pose une question spécifique sur le javascript, il est poli de répondre à la question en utilisant du javascript pur. Vous pouvez toujours suggérer quelque chose de la bibliothèque de votre choix, mais la réponse à la question doit être la première priorité.

10voto

Derek Dawson Points 266

C'est la façon la plus simple de faire en sorte que votre propre fonction javascript soit appelée lorsqu'une fonction onSubmit se produit.

HTML

<form>
    <input type="text" name="name">
    <input type="submit" name="submit">
</form>

JavaScript

window.onload = function() {
    var form = document.querySelector("form");
    form.onsubmit = submitted.bind(form);
}

function submitted(event) {
    event.preventDefault();
}

3 votes

Pourquoi avez-vous décidé de lier la fonction "soumis" ? Il n'y a pas d'utilisation de 'this' dans la fonction.

0 votes

bind est en effet inutile.

4voto

fakedob Points 145

En fonction de vos besoins, vous pouvez également effectuer les opérations suivantes sans recourir à des bibliothèques comme jQuery :

Ajoute ça à ta tête :

window.onload = function () {
    document.getElementById("frmSubmit").onsubmit = function onSubmit(form) {
        var isValid = true;
        //validate your elems here
        isValid = false;

        if (!isValid) {
            alert("Please check your fields!");
            return false;
        }
        else {
            //you are good to go
            return true;
        }
    }
}

Et votre formulaire peut encore ressembler à quelque chose comme :

    <form id="frmSubmit" action="/Submit">
        <input type="submit" value="Submit" />
    </form>

11 votes

Toujours utiliser addEventListener au lieu de onsubmit ou onload pour permettre aux autres développeurs d'ajouter leurs propres écouteurs.

2voto

Harsh Patel Points 172

Si vous avez plusieurs formulaires dans la même page et que vous voulez gérer l'événement submit Listener sans utiliser l'Id

jQuery

$('form').submit(function (event) {
    targetObj = event.target;
    // do your logic
});

Une astuce purement JavaScript

Onload fait juste le chemin en dessous.

for(var i=0; i<document.forms.length; i++){
    var form = document.forms[i];
    form.addEventListener("submit", myListener,false);
}

credit :- Gestion de plusieurs récepteurs d'événements de soumission de formulaires en utilisant JavaScript credit goes to Réponse de Jan Pfeifer sur la communauté StackOverflow

J'espère que cela aidera quelqu'un

1voto

Justin808 Points 5588

Avec jQuery :

$('form').submit(function () {
    // Validate here

    if (pass)
        return true;
    else
        return false;
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X