IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Forcer l'arret des fonctions successives d'un onclick="func1();func2()


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Points : 34
    Points
    34
    Par défaut Forcer l'arret des fonctions successives d'un onclick="func1();func2()
    Bonjour.

    J'ai un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onclick="function1();function2();function3()";
    Dans la function 1 je fais des vérifications

    Je veux empécher l'execution des functions qui succèdent à celle-ci.

    Break est annoncé comme une mauvaise méthode par Komodo edit.

    J'aimerai éviter d'utiliser une variable juste pour ça genre return valid=0 ; if valide !==0.

    Y-a-t-il moyen de terminer le script de manière forcée ?

    Bonne journée

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 580
    Points
    580
    Par défaut
    Bonjour,

    Quelque chose de ce genre?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function mafonction() {
      function1();
      if (verification1) function2();
      if (verification2) function3();
    }
     
    ...
     
    onclick="mafunction();"
    Pourquoi faut-il éviter break?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Points : 34
    Points
    34
    Par défaut
    Merci. Pour ton code.

    Je ne sais pas pourquoi, juste que komodo edit me dit de ne pas le faire.

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Komodo râle parce que le break n’est pas dans un switch ou dans une boucle. À l’exécution ça produit une syntax error.

    Si tu dois appeler plusieurs fonctions en séquence sur le même évènement, je te conseille de grouper les appels dans une autre fonction comme te le conseille eleydet. Autrement tu as un code « fragile » du point de vue de la maintenance, c’est-à-dire qu’il est facile d’y introduire des erreurs en le modifiant.

    J’ai fait quelques tests et j’en ai conclu que la technique à employer change selon la façon dont l’évènement est traité : si tu surveilles l’évènement avec un attribut HTML onclick, ou si tu utilises addEventListener.

    Avec onclick tu peux utiliser throw. C’est la méthode barbare : ça va stopper net l’exécution en lançant une exception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function function1() {
      throw 'Crôm !';
      ...
    }
    Ce qui rend la maintenance risquée dans ce cas, c’est principalement l’ordre d’appel : tu dois te souvenir dans quelle fonction se trouve le throw et toujours appeler cette fonction en premier.

    Avec addEventListener, tu devras appeler stopImmediatePropagation. Je te mets un exemple plus complet pour bien montrer comment attacher les différentes fonctions à l’évènement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function function1(event) {
      event.stopImmediatePropagation();
      ...
    }
     
    function function2(event) {
      ...
    }
     
    function function3(event) {
      ...
    }
     
    let $bouton = document.querySelector('#lebouton');
    $bouton.addEventListener('click', function1);
    $bouton.addEventListener('click', function2);
    $bouton.addEventListener('click', function3);
    Ici, le danger c’est l’ordre dans lequel tu attaches les fonctions : l’appel à stopImmediatePropagation doit se situer dans la première. Et encore, vu la nature asynchrone des évènements, je ne suis même pas sûr que l’ordre d’appel soit garanti. (Si quelqu’un a des infos à ce sujet, je prends.)

    La morale de tout ça c’est que la solution d’eleydet est la meilleure

Discussions similaires

  1. [AJAX] Avoir dans la fonction success des données et du html
    Par alaninho dans le forum jQuery
    Réponses: 4
    Dernier message: 26/06/2014, 10h27
  2. Forcer le type des paramètres d'une fonction
    Par Teocali dans le forum Général Python
    Réponses: 9
    Dernier message: 14/08/2010, 20h17
  3. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  4. Forcer l'affichage des dizaines...
    Par pataluc dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2002, 19h38
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo