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 :

Fonction non coopérante (toUpperCase)


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut Fonction non coopérante (toUpperCase)
    Bonjour,

    J'ai un problème avec une de mes fonctions...

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function auteurRedressement() {
    	var nomAuteur=document.getElementById("nomAuteur").value;
    	var nomAuteurRevu = nomAuteur[0].toUpperCase();
    	// nomAuteur[0].toUpperCase() = nomAuteurRevu;
    	var i=0;
    	for (i=0; i<nomAuteur.length; i++) {
    		if (nomAuteur[i]=="," || "-" || "") {
    			nomAuteurRevu = nomAuteur[i+1].toUpperCase();
    			// nomAuteur[i+1].toUpperCase() = nomAuteurRevu;
    		}
    	}
    }

    Elle est censée remettre en forme une saisie de type
    nom,prenom en Nom,Prénom
    ou nom, prenom1-prenom2 en Nom, Prénom1-Prénom2


    Ma console m'affiche cette erreur :

    TypeError: nomAuteur[(i + 1)] is undefined
    J'ai défini toutes mes variables et pense - peut-être à tort - que JS accepte, comme Python, les i+1...

    Alors quel est le problème??

    Merci pour votre aide !
    Dernière modification par Bovino ; 23/06/2013 à 16h38. Motif: Balises [quote] pour les messages d'erreur

  2. #2
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Bonsoir,

    tu as fait une alert de nomAuteur.length pour voir ?

    Pour moi ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (nomAuteur[i]=="," || "-" || "")
    , ce n'est pas bon.

    Natso

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mlebeguec Voir le message
    tu as fait une alert de nomAuteur.length pour voir ?
    Bonsoir Natso.
    nomAuteur.length me retourne 16 quand je saisis "Atwood, Margaret"
    Donc ça, ça fonctionne

    J'ai encore chipoté à ma fonction...
    Qui est devenue entre temps :

    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
    function auteurRedressement() {
     
    	var nomAuteur=document.getElementById("nomAuteur").value;
    	alert(nomAuteur.length);
     
    	var nomAuteurRevu = nomAuteur[0].toUpperCase()+	nomAuteur.substr(1,nomAuteur.length).toLowerCase();
     
    	var i=0;
    	for (i=0; i<nomAuteur.length; i++) {
    		if (nomAuteur[i]=="," || "-" || "") {
    			nomAuteurRevu = nomAuteur[i+1].toUpperCase();
    			document.getElementById("nomAuteur").value = nomAuteurRevu;
    		}
    	}
    }

    Mais euh... il ne me retourne rien quand je tape "atwood, margaret"
    Et "B" quand je tape "henry-levy, bernard"

    Je ne comprends pas très bien quelle bêtise je fais

    Pour moi ça:<code>if (nomAuteur[i]=="," || "-" || "")</code> , ce n'est pas bon.
    Ce sont les "ou" qui posent problème, d'après toi?
    parce que la "," seule, mon script l'acceptait, au départ...

    Merci pour la réponse rapide.
    Dernière modification par Invité ; 22/06/2013 à 22h11.

  4. #4
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Pour moi ce serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomAuteur[i]=="," || nomAuteur[i]=="-" || nomAuteur[i]==""
    nomAuteurRevu est écrasé dans ta boucle

    Je vais regarder plus en détail ton problème

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup.

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    nomAuteur[i]=="," || nomAuteur[i]=="-" || nomAuteur[i]==""
    J'ai essayé ta solution, il semblerait qu'elle génère la même chose que la mienne...

    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
    function auteurRedressement() {
     
    	var nomAuteur=document.getElementById("nomAuteur").value;
     
    	var nomAuteurRevu = nomAuteur[0].toUpperCase()+	nomAuteur.substr(1,nomAuteur.length).toLowerCase();
     
    	var i;
    	for (i=0; i<nomAuteurRevu.length; i++) {
    		//if (nomAuteur[i]==("," || "-" || "")) {
    		if (nomAuteurRevu[i]=="," || nomAuteurRevu[i]=="-" || nomAuteurRevu[i]=="") {
    			nomAuteurRevu = nomAuteurRevu[i+1].toUpperCase()+ nomAuteurRevu.substr(i+2,nomAuteurRevu.length).toLowerCase();
    			document.getElementById("nomAuteur").value = nomAuteurRevu;
    		}
    	}
    }

    J'ai encore changé ma fonction...
    Voici désormais où j'en suis...
    si je tape henry-levy, bernard, il me retourne " bernard" (avec un espace devant)

    je me suis dit que ma ligne 11 écrasait p-e ma chaine, en effet...

    ...et en même temps, si je tape "atwood, margaret" (stockée dans la variable nomAuteur),
    que ma ligne 5 transforme celle-ci en "Atwood, margaret", nvlle valeur affectée à la variable nomAuteurRevu,
    Que ma variable nomAuteurRevu est elle-même reparcourue avec un for, et modifiée (avec des toUpperCase et des toLowerCase) seulement à partir du moment où mes caractères ",", "-" et " " sont trouvés,
    je ne comprends pas bien comment il peut y avoir un écrasement de ma chaîne?

    Je suppose que ma logique est pourrie puisque le résultat de mon script en témoigne, mais je ne parviens pas à comprendre où mon raisonnement bat de l'aile...

  6. #6
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Les premiers posts étaient pour régler les problèmes de syntaxe.

    Normal tu fais ça: nomAuteurRevu[i+1]

    Donc pour moi déjà, supprime les espaces avant et après ta valeur nomAuteur. La personne qui écrit pourrait mettre un espace au début.

    Il y a plusieurs façons de faire ce n'est qu'un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var nomAuteurRevu = nomAuteur[0].toUpperCase();
    for (var i=1; i<=nomAuteur.length; i++) {
     if (nomAuteur[i-1]=="," || nomAuteur[i-1]=="-" || nomAuteur[i-1]=="") {
     nomAuteurRevu += nomAuteur[i].toUpperCase;
    else {
     nomAuteurRevu += nomAuteur[i];
    }		
    }
    Un truc comme ça. Je suis désolé je n'ai pas testé. Un peu fatigué.
    Natso

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je teste ça demain (je fatigue aussi ) !
    Mille mercis de t'être penché sur mon problème

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 183
    Points : 274
    Points
    274
    Par défaut
    Il y a des outils surpuissants pour les chaines de caractères, utilisons les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function upperCaseFirstLetter(str) {
      return str.replace(/(^|[\-,])(\w)(\w*)/g,function(a,b,c,d) {
          return b + c.toUpperCase() + d;
      });
     
    }
     
    console.log(upperCaseFirstLetter('machin-bidule-truc,pouet'));

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci,Arnogues.
    J'ai pas très bien compris ta fonction, mais je vais enquêter pour la clarifier.

    Bon dimanche.

Discussions similaires

  1. [LDAP] Fonctions non reconnues
    Par Wormus dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 10/01/2006, 13h46
  2. fonction non définie
    Par ston dans le forum Access
    Réponses: 11
    Dernier message: 12/12/2005, 16h02
  3. Verifier formulaire - fonction non appelée
    Par nerick dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/12/2005, 17h44
  4. [Configuration] Installation de PHP + Pbm de fonctions non reconnues
    Par BARBIER dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 23/11/2005, 10h54
  5. Le linker ignore les fonctions non implémentées
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/03/2005, 13h31

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