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'arrêt d'un script ?


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut Forcer l'arrêt d'un script ?
    Bonjour à tous,

    j'aurai besoin de stopper définitivement l'arrêt d'un script après un "alert".

    Comment faire ?

    Je sais que ce n'est pas très propre, mais ça me simplifierai grandement le boulot, car pour le moment, mes message d'erreurs se succèdent.
    Je ne suis pas un pro de la prog, soyez indulgents

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1

  3. #3
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Merci, mais ça ne fonctionne pas.
    Je pense que je n'ai pas été assez précis.

    Voici les informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <SPAN class="Effet3D3">Date : </SPAN><INPUT class="InputDATE Effet3D3" title="Sortir de la zone de saisie pour charger le fichier correspondant à la date, s'il existe (Appuyer sur la touche 'TAB' ou cliquer dans une autre zone de saisie)." type="text" id="DateID" REL="" onBlur="ControleDate();"/>
    <SPAN class="mtt" title="$(selecteur).MyCalendrierPicker({icon:true});"></SPAN><BR/><BR/>
    Le ControleDate qui fonctionne
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    function ControleDate() {
    	WControleDate = true;
    	// Controle de la date
    	WDateID = window.Form_PotAG.DateID.value;
    	WDateJour00 = new Date();
    	WDateJour01 = new Date(WDateJour00.getFullYear(), WDateJour00.getMonth(), WDateJour00.getDate());
    	WDateSaisie = new Date(WDateID.substr(6,4), WDateID.substr(3,2)-1, WDateID.substr(0,2));
     
    	if (window.Form_PotAG.DateID.value != "")
    	{
    		if (WDateSaisie > WDateJour01)
    		{
    			WControleDate = false;
    			alert("La date sélectionnée ne peut pas être supérieure à la date du jour !");
    			window.Form_PotAG.DateID.value = "";
    			window.Form_PotAG.DateID.className = "InputINVALIDE InputDATE Effet3D3";
    			window.Form_PotAG.DateID.focus();
    		}
    		else
    		{
    			window.Form_PotAG.DateID.className = "InputDATE Effet3D3";
    	// Si la date est valide 
    	// => Afficher le mois dans la cellule Cell_Mois
    	// => Rechercher le fichier mensuel correspondant au mois et chargement des valeurs
    	// => Rechercher le fichier quotidien correspondant existe et chargement des valeurs
    			Chargement_Donnees_Mensuelles();
    			Chargement_Donnees_Quotidiennes();
    		};
    	}
    	else
    	{
    		WControleDate = false;
    		alert("La date est obligatoire.");
    		var WDateSys = DateSysteme();
    		window.Form_PotAG.DateID.value = WDateSys;
     
    		window.Form_PotAG.DateID.className = "InputINVALIDE InputDATE Effet3D3";
    		window.Form_PotAG.DateID.focus();
    	};
    	return WControleDate;
    }
    Le ControleDate qui ne fonctionne pas
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    function ControleDate() {
    	WControleDate = true;
    	// Controle de la date
    	WDateID = window.Form_PotAG.DateID.value;
    	WDateJour00 = new Date();
    	WDateJour01 = new Date(WDateJour00.getFullYear(), WDateJour00.getMonth(), WDateJour00.getDate());
    	WDateSaisie = new Date(WDateID.substr(6,4), WDateID.substr(3,2)-1, WDateID.substr(0,2));
    
    	if (window.Form_PotAG.DateID.value != "")
    	{
    		if (WDateSaisie > WDateJour01)
    		{
    			WControleDate = false;
    			alert("La date sélectionnée ne peut pas être supérieure à la date du jour !");
    			window.Form_PotAG.DateID.value = "";
    			window.Form_PotAG.DateID.className = "InputINVALIDE InputDATE Effet3D3";
    			window.Form_PotAG.DateID.focus();
    		}
    		else
    		{
    			window.Form_PotAG.DateID.className = "InputDATE Effet3D3";
    	// Si la date est valide 
    	// => Afficher le mois dans la cellule Cell_Mois
    	// => Rechercher le fichier mensuel correspondant au mois et chargement des valeurs
    	// => Rechercher le fichier quotidien correspondant existe et chargement des valeurs
    			Chargement_Donnees_Mensuelles();
    			var WVerif = VerifDataQUOT();
    			if (WVerif == true)
    			{
    				Chargement_Donnees_Quotidiennes();
    			}
    			else
    			{
    				alert(WVerif);
    				return false;
    			};
    		};
    	}
    	else
    	{
    		WControleDate = false;
    		alert("La date est obligatoire.");
    		var WDateSys = DateSysteme();
    		window.Form_PotAG.DateID.value = WDateSys;
    
    		window.Form_PotAG.DateID.className = "InputINVALIDE InputDATE Effet3D3";
    		window.Form_PotAG.DateID.focus();
    	};
    	return WControleDate;
    }
    La fonction de vérification :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    function VerifDataQUOT() {
    	var WActx_FSO = new ActiveXObject('Scripting.FileSystemObject');
    	WRep = WActx_FSO.GetParentFolderName(self.location.pathname).substr(1);
    	//WRep=./PotAG/
    	WRepSPLIT = WRep.split("/");
    	WNbSPLIT = WRepSPLIT.length - 1;
    	WRepAEROD = "";
    	WRepDONNEES = "";
    	WRepRQTBonnes = "";
    	WRepRQTPasBonnes = "";
    	i = 0;
    	while (i <= WNbSPLIT)
    	{
    		WRepAEROD = WRepAEROD + WRepSPLIT[i] + "/";
    		i = i + 1;
    	};
    	//WRepDONNEES=./PotAG/DONNEES/
    	WRepDONNEES = WRepAEROD + "DONNEES/";
    	//WRepEntrepot=./PotAG/DONNEES/entrepot_fichiers_in_ope/
    	WRepEntrepot = WRepDONNEES + "entrepot_fichiers_in_ope/";
    	//WRepRQTBonnes=./PotAG/DONNEES/entrepot_fichiers_in_ope/requetes_bonnes/
    	WRepRQTBonnes = WRepEntrepot + "requetes_bonnes/";
    	//WRepRQTPasBonnes=./PotAG/DONNEES/entrepot_fichiers_in_ope/requetes_pas_bonnes/
    	WRepRQTPasBonnes = WRepEntrepot + "requetes_pas_bonnes/";
    	//WRepAEROD=./PotAG/DONNEES/LFPN/
    	WRepAEROD = WRepDONNEES + G_TERRAIN;
     
    	G_RepAEROD = WRepAEROD; // Indispensable pour passer l'information au traitement du calendrier pour tester l'existante du fichier
     
    	WDateID = window.Form_PotAG.DateID.value;
    	WDateID_AAAA = WDateID.substr(6,4);
    	WDateID_MM = WDateID.substr(3,2);
    	WDateID_JJ = WDateID.substr(0,2);
    	WDateTXT = WDateID_AAAA + "_" + WDateID_MM + "_" + WDateID_JJ;
    	WNomFichierTXT = WDateTXT + "_" + G_TERRAIN + "_potag.txt";
     
    	WVerifFichier = WRepAEROD + "/" + WNomFichierTXT;
    	if (WActx_FSO.FileExists(WVerifFichier))
    	{
    		WVerifData = true;
    		WVerifEMAIL = false;
    		WVerifAUTOINFO = false;
    		WFic_QUOT = WActx_FSO.OpenTextFile(WVerifFichier, 1);
    		while (!WFic_QUOT.AtEndOfStream)
    		{
    			var WLigneTXT = WFic_QUOT.ReadLine();
    			WLigSplit = WLigneTXT.split(";");
     
    			WNom_Champs = WLigSplit[0];
    			WLib_Champs = WLigSplit[1];
    			WVal_Champs = WLigSplit[2];
     
    			if (WNom_Champs.toUpperCase() == "CB_AUTOINFO")
    			{
    				WVerifAUTOINFO = true;
    			};
    			if (WNom_Champs.toUpperCase() == "C_EMAIL")
    			{
    				WEmail = window.Form_PotAG.C_Email.value;
    				if (WVal_Champs == "")
    				{
    					if (WEmail != "")
    					{
    						G_EMAIL = WEmail;
    						WVerifEMAIL = true;
    					};
    				}
    				else
    				{
    					WVerifEMAIL = true;
    				};
    			};
    		};
    		WFic_QUOT.close();
    		if (WVerifAUTOINFO == false)
    		{
    			WVerifData = "Fichier : " + WVerifFichier + " -> il manque la ligne AUTOINFO";
    			alert(WVerifData);
    //			return false;
    		};
    		if (WVerifEMAIL == false)
    		{
    			WVerifData = "Fichier : " + WVerifFichier + "-> il manque la ligne EMAIL";
    			alert(WVerifData);
    //			return false;
    		};
    		G_VERIF_QUOT = WVerifData;
    	};
    	return WVerifData;
    }
    Le but du jeu est donc que toute l'application s'arrête totalement.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    sauf a tester au niveau de chaque fonction si le retour est false ...

  5. #5
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Il y a throw aussi ..? Mais que veut dire pour toi arrêter l'application ? Sauf erreur pour l'instant je vois une saisie dans un formulaire. Dans un cas tu bloques sur le contrôle avec date invalide (Date obligatoire ou Date supérieur à la date du jour), dans l'autre pour l'instant tu ne fais qu'un alert (et un return false). Tu pourrais aussi bloquer sur le controle dans ce cas par exemple ? Si la situation peut-être résolue par l'opérateur. Ou recharger ta page ou une autre page ou n'importe quoi, tout dépend de ce que veut dire, pour toi, arrêter l'application. Il est, par exemple, possible de mettre en 'disabled' tous les controles du formulaire de saisie, si ton appli est pilotée comme ça.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    throw ou test de retour, il faudra à chaque debut de fonction tester poru savoir si l'on doit continuer le script ou non ...

  7. #7
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Ouep ... je me disais s'il y a une imbriquation profonde (mais là ça n'a pas l'air d'être le cas) un throw c'est plus un acenseur express que l'escalier du test de retour mais sur le fond tu as raison.

    edit: 12/01/2015 18:35 un petit bémol tout de même. L'avantage d'utiliser un throw, c'est que tu as une chance de le récupérer si tu enregistres un gestionnaire sur window.onerror. C'est pas la panacée, mais ça peut permettre de centraliser les traitements d'arrêt de l'appli.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 910
    Points
    44 910
    Par défaut
    Bonjour,
    plutôt que de mettre des "alert" dans la fonction VerifDataQUOT, je remonterais à la fonction appelante les informations sous forme d'un tableau ou objet JSON par exemple.

    Dans la fonction appelante, ControleDate, il te suffit de gérer la réponse et l'affichage en fonction du retour.

  9. #9
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sauf a tester au niveau de chaque fonction si le retour est false ...
    C'est ce que je fais, mais il y a pas mal de fonctions imbriquées et je pense que mon problème vient de là et du calendrier.

    Citation Envoyé par lysandro Voir le message
    Ouep ... je me disais s'il y a une imbriquation profonde (mais là ça n'a pas l'air d'être le cas) un throw c'est plus un acenseur express que l'escalier du test de retour mais sur le fond tu as raison.

    edit: 12/01/2015 18:35 un petit bémol tout de même. L'avantage d'utiliser un throw, c'est que tu as une chance de le récupérer si tu enregistres un gestionnaire sur window.onerror. C'est pas la panacée, mais ça peut permettre de centraliser les traitements d'arrêt de l'appli.
    J'ai "un peu" regardé du côté du throw, mais avec mes compétences débutantes, j'ai pas tout compris .

    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    plutôt que de mettre des "alert" dans la fonction VerifDataQUOT, je remonterais à la fonction appelante les informations sous forme d'un tableau ou objet JSON par exemple.

    Dans la fonction appelante, ControleDate, il te suffit de gérer la réponse et l'affichage en fonction du retour.
    J'ai essayé, mais ça me provoque un effet de bord avec le calendrier qui affiche un message en cas de date déjà saisie.
    Donc je me retrouve avec le premier message qui me dit qu'il manque telle ou telle information PUIS le message d'avertissement qui me dit que les données pour cette date ont déjà été saisie (ils peuvent modifier, mais il voulaient un avertissement).
    Le seul moyen que j'ai trouvé pour que ce dernier message soit possible a été de le mettre directement dans la fonction du calendrier.

Discussions similaires

  1. Empêcher l'arrêt d'un script suite à une erreur
    Par ProgVal dans le forum Langage
    Réponses: 12
    Dernier message: 02/11/2009, 15h30
  2. Forcer l'arrêt du système
    Par vg-matrix dans le forum Windows 7
    Réponses: 2
    Dernier message: 23/08/2009, 14h55
  3. Réponses: 3
    Dernier message: 27/09/2008, 11h46
  4. [MOSS] Forcer l'arrêt/redémarrage du service de recherche ?
    Par Leparachute dans le forum SharePoint
    Réponses: 3
    Dernier message: 26/07/2007, 16h16
  5. Arrêt aléaoitoire de scripts perl
    Par nicolas1980 dans le forum Langage
    Réponses: 3
    Dernier message: 14/04/2007, 08h59

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