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 :

Sortir d'une boucle avec break


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 590
    Points : 813
    Points
    813
    Par défaut Sortir d'une boucle avec break
    Bonjour et meilleurs vœux à tous,
    Je n'arrive pas à sortir de la boucle forEach en utilisant break;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function saveDate() { // callBack for calendar
    	tabForms.forEach(function(curForm){
    		let idId = curForm.querySelector("[name*='id'");
    		console.log(idId.value);
    		if (idId.value == 0)
    			break forEach;
    		if (idId.value !=0) { // value=0 means a new element
    			console.log(idId.value);
    			curForm.submit();
    		}
    	}, false );
    }
    J'obtiens une erreur "Uncaught SyntaxError: Undefined label 'forEach'".
    Si j'enlève l'étiquette, l'erreur est "Illegal break statement".
    Je ne comprends pas comment étiqueter ma boucle pour faire fonctionner.

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 091
    Points : 16 655
    Points
    16 655
    Par défaut
    Salut

    Je suis étonné de cette syntaxe break forEach;, pourquoi forEach, a vérifier en regardant l'aide PHP qui ne donne pour paramètre un argument numérique.
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 465
    Points : 4 650
    Points
    4 650
    Par défaut
    break forEach;
    pour utiliser un label sur un break, il faut avoir defini une region avant (ce qui n'est pas ton cas)
    soit tu fais juste un break;, soit tu definis ta region "forEach" quelque part en amont

    ps : ProgElecT, c'est pas du php
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 054
    Points : 44 568
    Points
    44 568
    Par défaut
    Bonjour,
    on ne quitte pas une boucle forEach, sauf à générer une erreur, dû au fait que c'est une fonction callback qui est exécutée à chaque itération.

    Ressource :
    Array.prototype.forEach(), idem pour NodeList.forEach, il faut utiliser un autre type de boucle, voir la Note, en milieu de page, sur le lien.

  5. #5
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 091
    Points : 16 655
    Points
    16 655
    Par défaut
    Désolé, j'ai cru être encor dans le forum PHP au moment de ma rédaction
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 590
    Points : 813
    Points
    813
    Par défaut
    Merci pour vos réponses qui m'ont éclairé.
    J'ai complètement réécris mon code. Je teste la condition avant et je n'exécute forEach que si la condition est remplie.
    @Doksuri
    C'est ce que j'ai cherché à faire en lisant la doc MDN sans y parvenir.
    @NoSmoking
    En cherchant dans la doc, je ne me souviens pas avoir vu cette note. Soit je ne suis pas exactement tombé sur cette page, soit j'ai zappé la note.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 590
    Points : 813
    Points
    813
    Par défaut
    Je reviens car compte tenu de vos remarques, j'ai encore un problème.
    Avec ce nouveau code, je ne comprends pas pourquoi la condition (idId.value) n'est pas prise en compte et doit être remplacée par celle de la ligne 7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function saveDate() { // callBack for calendar
    	console.log(tabForms);	// Un seul élément indexé 0
    	let idId = tabForms[0].querySelector("[name*='id'");
    	console.log(idId);		// input#id0, name=0[id], value=0
    	console.log(idId.value); 	// 0
    	//if (idId.value){ // value=0 means a new element => wait for complete saving
    	if (idId.value != 0){ // value=0 means a new element => wait for complete saving
    		console.log('boucle exécutée');		// 'boucle exécutée'
    		tabForms.forEach(function(curForm){
    			console.log('boucle exécutée');	// 'boucle exécutée'
    			//curForm.submit();
    		}, false );
    	}
    }

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 590
    Points : 813
    Points
    813
    Par défaut
    Désolé, je viens de comprendre mon erreur. J'ai confondu l'évaluation de la condition JavaScript avec celle de PHP. Explications ici:
    Attention à ne pas confondre les valeurs booléennes « primitives » true et false avec les valeurs true et false d'un objet Boolean. Toute valeur qui n'est pas false, undefined, null, 0, -0, NaN ou la chaîne vide (""), et tout objet, y compris un objet Boolean dont la valeur est false, seront évalués à true lors d'une instruction conditionnelle if.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sortir d'une boucle de parcour d'un Recordset
    Par Mariboo dans le forum IHM
    Réponses: 2
    Dernier message: 12/06/2006, 18h07
  2. Faire une boucle avec des variables vides ?
    Par byloute dans le forum Linux
    Réponses: 5
    Dernier message: 23/02/2006, 09h33
  3. Sortir d'une boucle en fonction d'une durée
    Par BECHE dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2005, 11h08
  4. [DEBUTANT] sortir d'une boucle avec un touche particulière
    Par thibouille dans le forum Débuter
    Réponses: 4
    Dernier message: 25/10/2005, 06h44
  5. SORTIR D'UNE BOUCLE
    Par chekibperl dans le forum Langage
    Réponses: 2
    Dernier message: 22/10/2005, 12h48

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