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 :

try catch et document.getElementById


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 44
    Par défaut try catch et document.getElementById
    Bonjour,

    Je cherche à améliorer ma manière de coder (et j'en ai besoin !) en faisant une gestion d'erreur via try catch. Or je n'y parviens pas dans le cas d'un document.getElementById(name).
    Ex 1 qui fonctionne bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function truc()
     { try{n'importe quoi}
       catch{alert('erreur');}
     }
    Ex 2 qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function truc2(name)
     { try{document.getElementById(name);}
       catch{alert('erreur');}
     }
    Dans le second cas lors de l'appel de la fonction, si l'argument "name" fourni est une "id" qui n'existe pas,
    je n'obtiens aucun message d'erreur via catch !

    Par avance, merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 101
    Par défaut
    Il n'y a pas d'erreur tout simplement parce que la méthode getElementById ne retourne jamais d'exceptions. Si il ne trouve pas de correspondance avec l'id passé en paramètre alors il renvoi null et lève pas d'exceptions.

    Google -> mot clés : exception javascript getelementbyid -> Premier lien

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 11
    Par défaut
    Bonjour,

    En effet, getElementById() ne gère pas d'exception mais tu peux lui indiquer les exceptions à lever, voir l'exemple ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
            var v = document.getElementById("sdfs");
            if (v == null) throw "erreur";
    }
    catch (e)
    {
       	alert(e);
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 44
    Par défaut
    MERCI de me mettre les yeux en face des trous

    Mon niveau n'est pas suffisant. Je n'aurais pas déduit de l'absence de retour d'une exception le fait que le try catch ne fonctionne pas.

    Si je comprends bien, je dois donc en revenir à une bonne vieille méthode telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (!document.getElementById(name)) {
             alert('erreur...');
    }
    else
    {....
    }
    Et moi qui espérait pouvoir coder plus proprement qu'avec ces if else.. via les try catch...

    Il n'y a vraiment pas de possibilité d'utiliser un try catch en "trichant" un peu ?

    Encore merci

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Pour allez un peu plus loin, voici la liste des Exceptions :

    * Error - base type for all errors. Never actually thrown by the engine.
    * EvalError - thrown when an error occurs during execution of code via eval()
    * RangeError - thrown when a number is outside the bounds of its range. For example, trying to create an array with -20 items (new Array(-20)). These occur rarely during normal execution.
    * ReferenceError - thrown when an object is expected but not available, for instance, trying to call a method on a null reference.
    * SyntaxError - thrown when the code passed into eval() has a syntax error.
    * TypeError - thrown when a variable is of an unexpected type. For example, new 10 or "prop" in true.
    * URIError - thrown when an incorrectly formatted URI string is passed into encodeURI, encodeURIComponent, decodeURI, or decodeURIComponent.

    elles sont assez simple a comprendre , je les laisse donc en anglais

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Hum... j'ai beau chercher, je vois pas trop l'utilité...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var v = document.getElementById("sdfs");
    if (!v){
        alert('Cet élément n\'existe pas !'); // Ou toute autre action.
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 44
    Par défaut
    Citation Envoyé par Royce Voir le message
    Bonjour,

    En effet, getElementById() ne gère pas d'exception mais tu peux lui indiquer les exceptions à lever, voir l'exemple ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
     {
            var v = document.getElementById("sdfs");
      	if (v == null) throw "erreur"
    }
    catch (e)
    {
       	alert(e);
    }
    Ahhhhhhhhhhhhhhhhhh YES LUMINEUX !
    Je viens de tester : c'est TOUT BON
    Un grand grand MERCI.

    @ Bovino : le but pour moi est de pouvoir déclencher une erreur si l'id citée dans document.getElementById("sdfs") n'existe pas dans le HTML. Cela a en effet un impact fort sur mon interface en développement. Mais peut-être n'est-ce pas la bonne méthode ?

    MERCI à TOUS, je cherchais depuis hier.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 101
    Par défaut
    Il faut alors se poser la question : Pourquoi cet élément n'a t-il pas été généré.
    Le client n'a pas d'impact (en théorie) sur le contenu html de ta page. Si tu as codé correctement dans ta page un élément il sera alors affiché, donc le test sur l'existence de cette balise n'a pas lieu d'être.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 44
    Par défaut
    Citation Envoyé par lifty Voir le message
    Il faut alors se poser la question : Pourquoi cet élément n'a t-il pas été généré.
    Le client n'a pas d'impact (en théorie) sur le contenu html de ta page. Si tu as codé correctement dans ta page un élément il sera alors affiché, donc le test sur l'existence de cette balise n'a pas lieu d'être.
    OUI, mais justement lever de telles exceptions fait gagnr du temps dans le débuguage de nouveaux templates un peu compliqués. Non ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 101
    Par défaut
    Afficher la Source html -> rechercher : idDeMonElement

    ça va me prendre 3 sec de vérifier l'existence d'un element dont je connais l'idée, point besoin de javascript pour ça, si tu lève une exception c'est pour faire un traitement particulier notamment côté client. Mais je te l'accorde c'est possible de faire comme ça aussi

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 44
    Par défaut
    Citation Envoyé par lifty Voir le message
    Afficher la Source html -> rechercher : idDeMonElement

    ça va me prendre 3 sec de vérifier l'existence d'un element dont je connais l'idée, point besoin de javascript pour ça, si tu lève une exception c'est pour faire un traitement particulier notamment côté client. Mais je te l'accorde c'est possible de faire comme ça aussi
    OUI, cela prend 3 secondes. Le problème pour moi est que ces erreurs sont muettes... et que l'on se retrouve avec une interface "bloquée" à chercher quelle est l'id et la portion de js qui coincent.

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par rolandcire Voir le message
    Et moi qui espérait pouvoir coder plus proprement qu'avec ces if else.. via les try catch...

    Il n'y a vraiment pas de possibilité d'utiliser un try catch en "trichant" un peu ?

    En quoi "tricher un peu" constitue une manière propre de coder ?
    Je reste persuadé que if / else est plus propre que générer une erreur inexistante, en plus cela te permet tout autant de débugger et de voir où se situent les problèmes.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 44
    Par défaut résolu
    Citation Envoyé par Bovino Voir le message

    En quoi "tricher un peu" constitue une manière propre de coder ?
    Je reste persuadé que if / else est plus propre que générer une erreur inexistante, en plus cela te permet tout autant de débugger et de voir où se situent les problèmes.

    Bon, ben convaincu ! MERCI
    Le sujet pour moi est résolu

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

Discussions similaires

  1. This.value au lieu de document.getElementById('field').value
    Par yoyot dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/03/2005, 14h02
  2. __try __finally et try catch
    Par buzzz dans le forum C++
    Réponses: 6
    Dernier message: 19/02/2005, 15h31
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 20h03
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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