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 :

Barre de progression


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut Barre de progression
    Bonjour,

    Après maintes reprises et aussi, des recherches sur la toile, je bloque sur ce code. J'aimerais avoir vos avis de pourquoi cela ne fonctionne pas ?

    HTML
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h4>Javascript/Jquery</h4>
                    <div id="progress">
                        <p>Niveau de compétence...<strong>0%</strong></p>
                        <progress value="5" min="0" max="100" id="myProgress">0%</progress>
                    </div>

    JAVASCRIPT
    Code JavaScript : 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
    progressValue: function () {
            console.info("app.progressValue")
     
            var val = document.getElementById("#myProgress").getAttribute("value")
            if (val >= 100){
                val = 5
                return
            }
            var newVal = val*1+0.25
            var txt = Math.floor(newVal)+"%"
     
            document.getElementById("#myProgress").getAttribute("value",newVal).text(txt)
            document.querySelector("p strong").textContent = txt
     
            setInterval(function () {
                app.progressValue()
            }, 40)
        }

    Merci

  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 645
    Points
    16 645
    Par défaut
    Salut

    Attention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.info("app.progressValue")
    Au vue de ce lien, préfères plutôt console.log.
    Penses à mètres des ; entre chaque instructions, peut être que ta fonction est quittée avant la fin, se qui expliquerai pour partie que cela ne fonctionne pas.
    document.getElementById("#myProgress") il me semble que la # est de trop.
    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
    Nouveau membre du Club

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut
    J'ai mis des ";" (même si pas obligatoire aujourd'hui en JS )partout et enlever le " # " mais rien n'a changé !

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Pas besoin de # avec getElementById. Ce n'est peut-être pas la seule erreur mais en tous cas c'en est une.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById("myProgress").
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  5. #5
    Nouveau membre du Club

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut
    Je n'avais pas mis les " # " mais vu que mon code ne fonctionnait pas, je me suis dis je vais les mettre pour voir ! Mais y'a rien qui a changé .

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    ça marchera jamais !

    tu lances récursivement une fonction par un setinterval.

    ça doit exploser la pile, et de toutes façon ce code n'a aucun sens puisque ta fonction setinterval appelle toutes les 40 milisecondes sa propre fonction.

    donc au début tu a une fonction
    puis au bout de 40 ms tu en à deux
    puis au bout de 80ms tu en a 4,
    puis au bout de 120ms tu en à 8 , etc,
    ce qui fait qu'au bout d'une seconde il y en a 33 554 432, si mes calculs sont exacts..

    Je me demande vraiment pourquoi faire ??
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Comme souvent il y a plusieurs problèmes.

    Celui évoqué par psychadelic mais aussi le fait que l'opération mathématique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var newVal = val*1+0.25

    puis deux problèmes :
    1 - le pourcent qui fait que la valeur n'est pas numérique.
    2 - et si on corrige 1, l'opération Math.floor qui fait que 5.25 est tronquée en 5 ce qui fait que ça n'augmente jamais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var txt = Math.floor(newVal)+"%"

    La ça fonctionne même si la réinitialisation ne se voit pas bien.
    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
     
    <h4>Javascript/Jquery</h4>
                    <div id="progress">
                        <p>Niveau de compétence...<strong>0%</strong></p>
                        <progress value="5" min="0" max="100" id="myProgress">0%</progress>
                    </div>
    <script>
    function progressValue() {
     
      var progress = document.getElementById("myProgress");
     
            var val = parseInt(progress.value);
      console.log(val);
            if (val >= 100){
       progress.value = 0;
                val = 5
            }
            var newVal = val+1;
      console.log(newVal);
            var txt = Math.floor(newVal);
     
            progress.value = txt;
            document.querySelector("p strong").textContent = txt+'%';
        }
     
     
            setInterval('progressValue()', 100);
    </script>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  8. #8
    Nouveau membre du Club

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Effectivement BAdaze, ton code fonctionne bien ! Mais chez moi non . Alors je vous mets tout mon code JS :

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
     
    app = {
     
        /**  Fonction appelée au chargement du DOM **/
        init: function () {
            console.info("app.init")
     
            /** Ecoute le bouton submit **/
            var  buttonAction = document.getElementById("buttonInput")
            if (buttonAction){
                buttonAction.addEventListener("click", this.submitform)
            }
     
        },
     
        submitform: function (e) {
            console.info("app.submitform")
     
            e.preventDefault()
            app.Onsubmit()
     
        },
     
        Onsubmit: function () {
            console.info("app.Onsubmit")
     
            var submitAction = document.getElementById("buttonInput")
            if (submitAction){
                var  name = document.querySelector(".inputName")
                var  email = document.querySelector(".inputMail")
                var  message = document.querySelector("textarea")
     
                // POUR LE CSS SPAN : ERREURS
                var spanName = document.querySelector('.errorName')
                spanName.style.position = 'absolute';
                spanName.style.left = '18em';
                spanName.style.top = '22.5em';
                spanName.style.width = '45%';
     
                var spanMail = document.querySelector('.errorMail')
                spanMail.style.position = 'absolute';
                spanMail.style.left = '18em';
                spanMail.style.top = '26.5em';
                spanMail.style.width = '47%';
     
                var spanMessage = document.querySelector('.errorMessage')
                spanMessage.style.position = 'absolute';
                spanMessage.style.left = '18em';
                spanMessage.style.top = '30.1em';
                spanMessage.style.width = '53%';
     
     
                var errors = []
                if (name.validity.valueMissing){
                    errors["name"] = document.querySelector(".errorName").textContent = "Le champs nom obligatoire."
                    return false
                }else {
                    var nomRegExp = /^[a-z]+$/i
                    if (name.value !== nomRegExp && name.value.length < 3){
                        errors["name"] = document.querySelector(".errorName").textContent = "Le nom n'est pas valide."
                        return false
                    }else {
                        errors["name"] = document.querySelector(".errorName").textContent = " "
                    }
     
                }
     
                if (email.validity.valueMissing){
                    errors["email"] = document.querySelector(".errorMail").textContent = "Le champs email obligatoire."
                    return false
                }else {
                    var emailRegExp = /^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/
                    if (!emailRegExp.test(email.value)){
                        errors["email"] = document.querySelector(".errorMail").textContent = "L'email n'est pas valide."
                        return false
                    } else {
                        errors["email"] = document.querySelector(".errorMail").textContent = ""
                    }
                }
     
                if (message.validity.valueMissing){
                    errors["message"] = document.querySelector(".errorMessage").textContent = "Le champs message obligatoire."
                    return false
                }else {
                    if (message.value.length < 100){
                        errors["message"] = document.querySelector(".errorMessage").textContent = "Votre message est court."
                        return false
                    } else {
                        errors["message"] = document.querySelector(".errorMessage").textContent = ""
                    }
                }
     
     
                /**** APPEL AJAX : si, pas d'erreurs ****/
                if (!(errors['name'] && errors['email'] && errors['message'])){
                    app.callRequestAction()
                }
     
            }
     
        },
     
        callRequestAction: function () {
            console.info('app.callRequestAction')
     
            var xhr = false
            var form = document.querySelector("#form")
            var button = document.querySelector("#buttonInput")
     
            xhr = new XMLHttpRequest()
            if (!xhr){
                return false
            }
     
            xhr.onreadystatechange = function () {
                button.disabled = true
                button.textContent = "Chargement..."
     
                if (xhr.readyState === 4){
                   app.callAjaxAction(xhr)
                }
            }
            xhr.open('POST', 'contact', true)
            xhr.setRequestHeader('X-Requested-With','XMLHttpRequest')
            var  data = new  FormData(form)
            xhr.send(data)
        },
     
        callAjaxAction: function (xhr) {
            console.info('app.callAjaxAction')
     
            var form = document.querySelector("#form")
            var button = form.querySelector("#buttonInput")
     
            if (xhr.readyState === XMLHttpRequest.DONE){
     
                if (xhr.status === 200){
     
                    var inputs = form.querySelectorAll("input,textarea")
                    for(var i = 0; i < inputs.length; i++){
                        inputs[i].value = ''
                        button.disabled = false
                        button.textContent = 'Envoyer'
                    }
     
                    var divContainer = document.querySelector('.formContact')
                    var div = document.createElement('div')
                    div.className = 'flash-notice'
                    divContainer.appendChild(div)
     
                    // AJOUT DE STYLE
                    div.style.position = 'relative';
                    div.style.top = '-24em';
     
                    div.textContent = 'Votre message a été envoyé !'
                }else {
                    return false
                }
            }
        },
     
        /***      FOR PROGRESS BAR TEST ***/
        progressValue: function () {
            console.info("app.progressValue")
     
            var val = document.getElementById("myProgress")
            var valParse = parseInt(val.value)
     
            if (valParse >= 100){
                val.value = 0
                valParse = 5
            }
            var newVal = valParse + 1
            var txt = Math.floor(newVal)
     
            val.value = txt
            document.querySelector("p strong").textContent = txt + "%";
     
        }
        setInterval("progressValue()", 100)
     
     
     
     
    }
     
    /** Chargement du DOM**/
    window.onload = app.init()

  9. #9
    Nouveau membre du Club

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    La solution pour faire fonctionner mon code était juste d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    window.onload = function (){
            setInterval("app.progressValue()", 200)
     
    }
    Près du lancement du DOM (à chaque fois que la page se charge). Mais mon soucis maintenant, est de remettre à zéro la progression à chaque fois que la barre de progression se relance. Parce que dans la console il n'arrête de compter (le compteur s'incrémente sans arrêt).

  10. #10
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    Dans ce cas, ton JS devrait être écrit plus proprement en :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    window.onload = function (){
            setInterval(app.progressValue , 200); 
    }

    ou encore (ES6)
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload = () => setInterval(app.progressValue, 200);
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  11. #11
    Nouveau membre du Club

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut
    Salut,

    le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    window.onload = function (){
            setInterval("app.progressValue()", 200)
     
    }
    fonctionne avec ou sans "". Mais j'ai enlevé les guillemets. Au fait, ça ne réponds pas à ma question alors, si quelqu'un à une idée je suis preneur.

  12. #12
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    si tu enlève les guillemets il faut aussi enlever les parenthèses, parce que la première syntaxe de l'instruction setInterval utilise un pointeur et non une fonction à évaluer.

    Je reviendrai pour la suite...
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  13. #13
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Exemple :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="progress">
        <p>Niveau de compétence : <progress id="myProgress" min="0" max="100" step="0.25" value="5"></progress> <strong>5.00 %</strong></p>
    </div>


    Code JavaScript : 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
    let progressValue = () => {
        const elemMyProgress = document.querySelector("#myProgress");
     
        let val = Number(elemMyProgress.value);
     
        // debug, console, touche F12
        console.log(`value = ${ val }`);
     
        if (val >= 100) {
            val = 5
            return;
        }
     
        let 
            newVal = val + 0.25,
            txt = newVal.toFixed(2) + " %"
     
        // debug
        console.log(`newVal = ${ newVal }`);
        console.log(`txt = ${ txt }`);
     
        elemMyProgress.value = newVal;
     
        document.querySelector("#progress > p > strong").textContent = txt
     
        setTimeout(progressValue, 1000); // 1s
    };
     
    progressValue();

    EDIT 2018-09-01

    Un meilleur code :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="progress">
        <p>Niveau de compétence : <progress min="0" max="100" step="0.25" value="5"></progress> <strong>5.00 %</strong></p>
    </div>

    Code JavaScript : 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
    const 
        elemDivProgress = document.querySelector('#progress'),
        elemProgress = elemDivProgress.querySelector('progress'),
        elemStrong = elemDivProgress.querySelector('strong');
     
    let progressValue = () => {
        let val = Number(elemProgress.value);
     
        if (val >= 100) {
            return;
        }
     
        let 
            newVal = val + 0.25,
            txt = newVal.toFixed(2) + " %"
     
        elemProgress.value = newVal;
     
        elemStrong.textContent = txt
     
        setTimeout(progressValue, 1000); // 1q
    };
     
    progressValue();

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  14. #14
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 742
    Points
    4 742
    Par défaut
    @avion

    ton code JS fait presque 200 lignes, bon, et en plus tu sembles un adepte de l'omission des points-virgules, bon.

    Je sais qu'en JS on peut souvent en être amené à devoir écrire pas mal de lignes de code, et que l'utilisation des points-virgules n'est pas obligatoire.
    Mais la pour moi, qui utilise toujours les points virgules, lire ton code est un supplice, alors je vais pas continuer.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    la question a déjà été traitée dans cette discussion récente.

    NoSmoking y propose un code élégant et efficace : https://codepen.io/jreaux62/pen/xaqwQG
    Dernière modification par Invité ; 01/09/2018 à 12h27.

  16. #16
    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
    Citation Envoyé par avion Voir le message
    le code […] fonctionne avec ou sans "". Mais j'ai enlevé les guillemets.
    Citation Envoyé par psychadelic Voir le message
    si tu enlève les guillemets il faut aussi enlever les parenthèses, parce que la première syntaxe de l'instruction setInterval utilise un pointeur et non une fonction à évaluer.
    La différence est importante, car quand on passe une chaîne, le code est évalué à l’exécution (runtime), ce qui peut empêcher les optimiseurs de faire leur travail. De plus, le modèle de sécurité n’est pas le même : la chaîne est traitée comme si on appelait eval.

    Lorsqu’on opte pour la forme « pointeur de fonction », il y a un piège à éviter : le contexte this est perdu. Dans le cas présent ce n’est pas grave car progressValue n’utilise pas this, mais c’est mieux d’être au courant du problème.

    Pour éviter un changement de contexte accidentel, il vaut mieux prendre la précaution d’encapsuler l’appel dans une fonction anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setInterval(() => {
      app.progressValue();
    }, 200);
    Sans vouloir faire de l’auto-promotion, j’ai écrit un article qui est complètement dans le sujet : CSP ou De l’importance de passer des fonctions à setTimeout
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 13h15
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56
  3. Réponses: 12
    Dernier message: 27/05/2004, 00h13
  4. [DEBUTANT] Barre de progression
    Par pupupu dans le forum MFC
    Réponses: 4
    Dernier message: 18/01/2004, 16h47
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56

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