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 :

Mon script passe une fois de trop dans la boucle


Sujet :

JavaScript

  1. #1
    Membre émérite

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Par défaut Mon script passe une fois de trop dans la boucle
    Bonjour à tous,

    J'ai un petit soucis que je n'arrive pas à résoudre.

    Voici mon code javascript

    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
    92
    function doPost(command, txt)
    {
        document.title = txt;
        document.editform.bv.disabled = true;
        document.editform.bs.disabled = true;
        document.editform.cmd.value = command;
        document.editform.submit();
    }
     
     
    function closeForm()
    {
     
        if(document.editform.cmd.value != 'Save' && document.editform.cmd.value != 'ValidateForm')
        {
            var confirm2 = confirm("Some fields have been modified. \n Do you want to save the form before closing it?");
            if(confirm2)
            {
                doPost("Save", "Please wait, your form is being saved");
            }
            else
            {
                window.close();
            }
        }
    }
     
    var fieldsOnLoad;
    var fieldsOnUnload;
     
    function listFieldsOnLoad()
    {
        var formLength = document.editform.elements.length;
        fieldsOnLoad = new Array(formLength);
        for(var i = 0; i< formLength; i++)
        {
            fieldsOnLoad[i] = new Array(2);
        }
        for(var i = 0; i< formLength; i++)
        {
            fieldsOnLoad[i][0] = document.editform.elements[i].name;
            fieldsOnLoad[i][1] = document.editform.elements[i].value;
        }
     
    }
     
    function listFieldsOnUnload()
    {
        var formLength = document.editform.elements.length;
        fieldsOnUnload = new Array(formLength);
        for(var i = 0; i< formLength; i++)
        {
            fieldsOnUnload[i] = new Array(2);
        }
        for(var i = 0; i< formLength; i++)
        {
            fieldsOnUnload[i][0] = document.editform.elements[i].name;
            fieldsOnUnload[i][1] = document.editform.elements[i].value;
        }
     
        fieldChanged();
        return true;
     
    }
     
     
    function fieldChanged()
    {
        var valueChanged = false;
     
        checkFields :
        for(var i = 0 ; i< fieldsOnLoad.length ; i++)
        {
            for(var j = 0 ; j< fieldsOnUnload.length ; j++)
            {
                if(fieldsOnLoad[i][0] == fieldsOnUnload[j][0])
                {
                    if(fieldsOnLoad[i][1] != fieldsOnUnload[j][1])
                    {
                        //alert('value changed');
                        valueChanged = true;
                        break checkFields;
                    }
                }
            }
        }
     
        if(valueChanged)
        {
            closeForm();
        }
    }
    Et voici comment j'appelle mes fonctions dans ma page html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <BODY onLoad="listFieldsOnLoad()" onBeforeUnload="listFieldsOnUnload()">
    Le problème est qu'il repasse une 2è fois dans la fonction closeForm(). Et ja n'arrive pas à comprendre pourquoi.

    Je suppose que j'ai mon nez dessus, mais malgré tout je ne trouve pas.

    Si quelqu'un pouvait jeter un coup d'oeil et voir ce qui ne va pas.

    D'avance merci pour vos réponses.

  2. #2
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Salut,

    Je pense que ton code réagit comme celui que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    <head>
    <script>
    function exit()
    {
    	window.close();
    }
    </script>
    </head>
    <body onBeforeUnload="exit()">
    <input type="button" value="Test !" onclick="window.close()" />
    </body>
    </html>
    Si on cliquer sur le bouton nommé "Test !", la fenêtre se ferme (voir l'action onclick). Une boite d'avertissement propose de fermer la fenêtre. Si l'utilisateur accepte, la fentre doit se fermer, donc onBeforeUnload prend le relais avec la fonction exit, et donc la deuxième proposition pour quitter la page apparaît !.

    Dis moi si cela t'aide !

    Florian.

  3. #3
    Membre émérite

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Par défaut
    le problème est que j'appelle l'événement onBeforeUnload avant d'appeler le window.close()

  4. #4
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par Stessy
    Le problème est qu'il repasse une 2è fois dans la fonction closeForm(). Et ja n'arrive pas à comprendre pourquoi.

    Je suppose que j'ai mon nez dessus, mais malgré tout je ne trouve pas.

    Si quelqu'un pouvait jeter un coup d'oeil et voir ce qui ne va pas.

    D'avance merci pour vos réponses.
    Euh, il passe une deuxième fois dans la méthode au moment du unload? C'est bien ça????

    Dans le code que tu nous a montré, il n'y a pas de raison pour....

    Est ce que tu appelles les méthodes à un autre moment?

    A vrai dire, le problème vient peut-être du fait que tu valides un formulaire sur le unload de la page. La page est censée se recharger quand tu valides le formulaire.... Je ne sais pas trop quel comportement ça donne au navigateur. Tu travailles uniquement avec IE?

  5. #5
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Es-tu sûr que le window.close n'est pas appelé en premier dans ta fonction "fieldChanged" ?

  6. #6
    Membre émérite

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Par défaut
    Bon ben je viens de faire un test.

    Et j'ai uniquement le problème avec FF et non IE.

    Encore un problème de compatibilité. Pffffff.

    Mais je ne vois pas comment le résoudre.

    [EDIT] Je viens de faire des tests supplémentaires avec FF, et le problème n'apparait qu'avec des input de type text ou textarea, avec les checkbox et les listes je n'ai pas de problème [/EDIT]


Discussions similaires

  1. [Batch] Script qui une fois lancé n'affiche pas les commandes dans le terminal
    Par alex2746 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 25/05/2012, 10h53
  2. script remonter une propriété du utilisateur dans L'AD
    Par Scriptman dans le forum VBScript
    Réponses: 0
    Dernier message: 19/01/2010, 16h08
  3. Ajouter qu'une fois un numéro dans input
    Par mathias59 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/12/2008, 10h42
  4. [Conception] Ajout d'un crédit une fois par jour dans la bdd
    Par Dev@lone dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 06/02/2008, 14h53
  5. Lancer un script Javascript une fois un script PHP terminé
    Par kingmandrax dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 30/09/2006, 17h18

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