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 :

Ne retourner aucune valeur


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut Ne retourner aucune valeur
    Bonjour à tous

    Très débutant en JavaScript (vous-vous en doutez vu le titre du sujet ), je cherche à ne retourner absolument aucune valeur d'une petite fonction...

    Voilà la situation : j'ai une variable contenant une liste de valeurs (array), or je dois récupérer des valeurs de cette liste, seulement, si la valeur n'existe pas, je ne souhaite rien retourner...

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    <!--
      var theList = new Array('un', 'deux', 'tres');
      function get_item(theNro) { 
        if(theList[theNro]) { return theList[theNro]; } else { return; }
      }
    //-->
    </script>
    Et dans le code Html je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p>
      <a href="javascript:document.getElementById('uno').innerHTML = get_item(1);">Valeur 1</a> : 
      <strong id="uno">-</strong>
    </p>
    Or, lorsque je fais "get_item(1)" j'obtiens bien la valeur "deux", mais lorsque je fais "get_item(3)" j'obtiens "undefined", et pour cause, la variable "theList" ne contient pas l'élément démendé...

    Alors, comment faire pour que ma fonction "get_item" ne retourne rien lorsqu'aucune valeur n'est trouvée dans la variable "theList" ?

    Lorsque je dis aucune valeur, je ne veux pas dire une valeur vide qui remplacerait celle déjà existante, mais vraiment aucune valeur, histoire que la valeur déjà affichée ne soit pas remplacée...

    J'espère que ce n'est pas trop confus... toutes les pistes sont les bienvenues... merci à tous !

    a+

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Waouuuuh ! J'ai pas tout compris...
    Tu peux expliquer ce que tu cherches à faire (fonctionnellement) ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Bonjour...
    Citation Envoyé par OButterlin
    Waouuuuh ! J'ai pas tout compris...
    Tu peux expliquer ce que tu cherches à faire (fonctionnellement) ?

    A+
    Je crois que j'ai fais une petite bêtise... pensant que mon message n'était pas publié, je viens de le reposter... peut-être un peu plus clair d'ailleurs...

    Bon, je tente de réproduire ma question :

    J'ai donc une petite fonction qui retourne une valeur d'une variable de type Array selon l'argument fourni :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    <!--
      var theList = new Array('un', 'deux', 'trois');
      function get_item(theNro) { 
        if(theList[theNro]) { return theList[theNro]; }
      }
    // -->
    </script>
    J'appelle cette fonction de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:document.getElementById('cible').innerHTML = get_item(1);">Valeur 1</a> : <span id="cible">-</span>
    Ceci fonctionne très bien, sauf lorsque je demande une valeur qui n'existe pas dans la variable "theList", par exemple si je fais "get_item(4)", j'obtiens un laconique "undefined", or je souhaiterais ne rien avoir, c'est à dire, conserver la valeur déjà existante dans la cible...

    Comment faire donc pour que ma fonction "get_item" ne retourne absolument aucun résultat si la valeur demandée n'existe pas dans la variable "theList" ?

    J'espère que c'est un peu plus clair... merci de vos lumières... à+

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bon j'avais déjà répondu, mais la validation a merdouillé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    <!--
      var theList = new Array('un', 'deux', 'tres');
      function get_item(theNro) { 
        if(theList[theNro]!="undefined") { return theList[theNro]; } else { return ""; }
      }
    //-->
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p>
      <a href="javascript:la_valeur=get_item(1); if (la_valeur.length) document.getElementById('uno').innerHTML = la_valeur;">Valeur 1</a> : 
      <strong id="uno">-</strong>
    </p>
    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Re...
    Citation Envoyé par E.Bzz
    Bon j'avais déjà répondu, mais la validation a merdouillé
    Merci beaucoup de ta réponse... je viens de tester et ça fonctionne

    Seulement, je me demande s'il n'y aurait pas une solution un peu plus simple ?

    Je pense à un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      function get_item(theNro) { 
        if(theList[theNro]) { return theList[theNro]; } else { NULL; }
      }
    J'ai essayé cette piste et ça semble fonctionner, sauf que je ne sais pas du tout si elle est "correcte" ou plantogène... des idées ?

    Merci en tout cas

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Très bon le "plantogène"

    Un "return null;" serait plus "propre" (plus juste je sais pas).
    L'instruction qui appelle la fonction attend qu'elle lui return qqchose (sinon c'est une procédure, plus une fonction) ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Re...
    Citation Envoyé par E.Bzz
    Très bon le "plantogène"


    Citation Envoyé par E.Bzz
    Un "return null;" serait plus "propre" (plus juste je sais pas).
    Oui, j'ai déjà essayé cette syntaxe, mais, hélas, elle remplace la valeur déjà existante dans la cible par une valeur vide, or je souhaiterais que la valeur originale reste en place si la fonction ne trouve aucune valeur dans la liste... je ne sais pas si je suis clair là

    Citation Envoyé par E.Bzz
    L'instruction qui appelle la fonction attend qu'elle lui return qqchose (sinon c'est une procédure, plus une fonction) ...
    En effet, tu as raison, sauf que là ça ne peut pas être une simple procédure puisque si la valeur démandée existe elle doit être retournée...

    Bref... j'ai déjà une solution possible, maintenant je chippote un peu pour trouver quelque chose d'un peu plus simple (j'allais dire "élégant")...

    Merci

  8. #8
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    En fait tu ne semble pas avoir compris le principe
    undefined, c'est un peu comme null ou nothing d'un autre langage.
    Lorsque ta fonction ne retourne rien, elle retourne en fait undefined, de même lorsque tu veux recupérer window.unTrucQuiNExistePas

    Cet objet undefined possède une méthode toString virtuelle (donc pas accessible via JavaScript) qui retrourne.... "undefined"

    Alert prend un paramètre au format String, si tu lui envoie undefined, qui est de type Object (enfin pas vraiment mais bon soit), il va appeler toString pour faire la consersion...

    De même que si tu avais fait return null; il aurait affiché "null"
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Bonjour FremyCompany et merci pour ta réponse...
    Citation Envoyé par FremyCompany
    En fait tu ne semble pas avoir compris le principe
    undefined, c'est un peu comme null ou nothing d'un autre langage.
    Lorsque ta fonction ne retourne rien, elle retourne en fait undefined, de même lorsque tu veux recupérer window.unTrucQuiNExistePas

    Cet objet undefined possède une méthode toString virtuelle (donc pas accessible via JavaScript) qui retrourne.... "undefined"
    Ok, c'est plus clair... maintenant, comment puis-je faire, de la manière la plus simple possible, pour que ce fameux "undefined" ne s'affiche pas ?

    La solution proposée par E.Bzz fonctionne bien, mais, avant de l'adopter, je me demandais s'il n'y avait pas quelque chose de plus simple à envisager... en tout cas, la méthode du "NULL" a l'air de fonctionner, mais je ne sais pas si c'est bien ou pas...

    Merci pour ta réponse... je continue à chercher... à+

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Moi je déclancherais une erreur pour arrêter tout le processus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function get_Item(theNro) {
      var r= theList[theNro]; if (r) { return r; }
      throw ("Opération abandonnée");
    }
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Re...
    Citation Envoyé par FremyCompany
    Moi je déclancherais une erreur pour arrêter tout le processus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function get_Item(theNro) {
      var r= theList[theNro]; if (r) { return r; }
      throw ("Opération abandonnée");
    }
    Très très intéressante ta proposition, elle fonction super bien !

    J'ai appris un truc en plus, je pensais que "throw" ne s'utilisait que dans une syntaxe "try ... catch", mais dans ton exemple ce n'est pas le cas et ça fonctionne quand-même... top !

    Donc, pour conclure, j'ai encore un peu simplifié ta proposition de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function get_item(theNro) { 
      if(theList[theNro]) { return theList[theNro]; }
      throw ("Acune valeur");
    }
    Merci beaucoup FremyCompany, ta solution qui me convient parfaitement !

    Merci à tous... à+

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

Discussions similaires

  1. selectrow_hashref ne retourne aucune valeur
    Par OlivierCimb dans le forum SGBD
    Réponses: 3
    Dernier message: 10/07/2012, 12h01
  2. svn propget ne retourne aucune valeur
    Par Emmanuel_ dans le forum Subversion
    Réponses: 2
    Dernier message: 02/03/2012, 10h12
  3. Réponses: 7
    Dernier message: 01/08/2008, 09h45
  4. subreport ne retourne aucune valeur
    Par phicault dans le forum iReport
    Réponses: 3
    Dernier message: 11/06/2008, 11h51
  5. Ma requete me retourne aucune valeur
    Par zorba49 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 22/08/2005, 14h10

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