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 :

modification valeur d'un input text et position du curseur


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut modification valeur d'un input text et position du curseur
    Bonjour,
    Je travaille essentiellement sous Firefox.
    J'ai une fonction, très simple qui transforme le contenu d'un input en majuscules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //à utiliser avec onkeyup = "auto_format_majuscules(this);" dans l'input text désiré
    function auto_format_majuscules(input){
    	input.value = input.value.toUpperCase();
    }
    Le problème est que lorsque je l'utilise sur un input de type text et que la taille du texte dépasse la taille du champs, seul le début du texte est visible.
    Par contre le curseur lui est à la fin du champs.
    Du coup, on ne voit pas ce que l'on écrit.

    J'espère être clair dans mes explications.
    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Bizzare... normalement le texte avance avec le curseur... ta fonction n'a rien a voir la dedans je pense... ta essayé sans cette fonction ? et tu l'appelle quand cette fonction ? A chaque lettre ajouter dans le input ?

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    je l'appelle onkeyup sur l'input.

    J'ai fait un petit fichier d'exemple :

    bug_majuscules.html
    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
    <html>
    	<head>
    		<title>Problème auto_format_majuscules</title>
    		<script type='text/javascript'>
    		//à utiliser avec onkeyup = "auto_format_majuscules(this);" dans l'input text désiré
    		function auto_format_majuscules(input){
    			input.value = input.value.toUpperCase();
    		}
    		</script>
    	</head>
    	<body>
    		Test : 
    		<input type='text' onkeyup="auto_format_majuscules(this)" />
    		<br />
    		(écrivez une longue phrase pour constater le bug)
    	</body>
    </html>

  4. #4
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Teste la valeur de la touche appuyée (event.keyCode). Apparemment tu ne veux pas agir sur les flèches, par exemple.
    Un exemple pour t'inspirer trouvé vite fait : http://www.developpez.net/forums/d26...rn-javascript/

    edit: quoique je ne suis même pas sûr!

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    @franculo_caoulene:
    Pourquoi devrais-je regarder quelle touche l'utilisateur a pressé ?
    Je ne veux que mettre en majuscule le texte saisi.
    Après, s'il y a des chiffres dans le champs, ils peuvent rester.

    Mais en soit, la fonction fonctionne (quel beau pléonasme).
    Le problème est bien visible sur le fichier d'exemple que j'ai mis en CODE précédemment.

  6. #6
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    C'est vrai je dis de grosses bêtises ces jours-ci. Je vais me prendre des vacances de forum.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Tu n'as pas répondu a ma question, si tu enlève cette fonction et que tu écris dans le champ, le curseur et le texte se déplace normalement ? (je suppose que oui mais bon...)

  8. #8
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    @borowski:
    Oui oui, bien sûr, ce qu'on voit dans le champs suit le curseur normalement si je ne mets pas ma fonction.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Juste pour voir, ta essayé de faire ceci dans ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function auto_format_majuscules(input){
    		input.value = input.value.toUpperCase();
                    input.blur();
                    input.focus();
    	}
    ou dans ce sens la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function auto_format_majuscules(input){
    		input.blur();
                    input.value = input.value.toUpperCase();
                    input.focus();
    	}
    EDIT : Ah nan c'est peut-etre con ce que je dis... car la le curseur reviendra au début a chaque fois...Enfin faut essayer...

  10. #10
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Hééé ben non... ça ne fonctionne toujours pas :/

    J'ai essayé d'aller encore un peu plus loin en indiquant où le curseur doit se placer:
    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
     
    function auto_format_majuscules(input){
    	//récupération de la position du curseur
    	var start = input.selectionStart;
    	var end = input.selectionEnd;
     
    	//passage en majuscules
    	input.value = input.value.toUpperCase();
     
    	//blur/focus
    	input.blur();
    	input.focus();
     
    	//on force le curseur à revenir à sa position initiale
    	input.selectionStart = start;
    	input.selectionEnd = end;
    }
    Cela fonctionne dans le sens où ça déplace le curseur là où on lui indique.
    Mais le curseur est toujours hors de notre champs de vision.
    En fait, c'est dans la gestion de ce qui est visible dans le cadre de l'input.
    Lorsqu'on modifie la valeur de l'input, cette "fenêtre" de visibilité se réinitialise, et pour le coup, je vois pas trop comment arranger ça.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Et ta essayé de faire appel à ta fonction a travers un autre évènement que OnKeyUp ? OnKeypress ? OnChange ?

  12. #12
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Disons que le but est que les lettres soient passées en majuscules au fur et à mesure que l'on écrit.
    Avec onkeydown et onkeypress, la fonction est appelée avant que la lettre pressée ne soit écrite dans le champs, donc seules les lettres écrites précédemment sont passées en majuscules (par contre, ça fonctionne, on voit toujours le curseur).
    Avec onchange, ce n'est que lorsqu'on a quitté le champs qu'il est passé en majuscules. Donc, ça ne va pas non plus.

    L'événement onkeyup correspond à ce que je veux faire. Mais il y a juste un comportement étrange de l'input.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Je pense que tu peux le faire avec le OnKeyPress...

    Dans ta fonction appelée par l'évènement OnKeyPress, tu récupère la touche tapée au clavier, tu la met en majuscule et tu l'ajoute a ton input...

    En code, je te laisse faire car je ne sais pas comment récupéré la touche tappée au clavier...

  14. #14
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    bon... en admettant que ce comportement est aormal, que c'est un bug du navigateur et qu'on n'y peut rien.

    On peut peut-être utiliser l'événement onkeydown (ou onkeypress), intercepter la toucher pressée par l'utilisateur et si c'est une lettre, la remplacer par son équivalent en majuscule.

    C'est moins élégant, plus tordu, mais ça pourrait fonctionner.


    EDIT: les grands esprits se rencontrent

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut


    Et tu es sur qu'avec le OnKeyPress la fonction est appelé avant que la lettre soit inscrite dans le input ??

  16. #16
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Bon, finalement, cette solution n'est pas si miraculeuse que ça.
    On peut savoir quelle touche a été pressée, mais ça ne nous aide pas plus que ça.
    Les lettres accentuées sur un clavier sont sur les mêmes touches que des chiffres, et on ne peut pas forcément faire la distinction. Sans compter qu'il y a plusieurs types de claviers.

    EDIT: oui, j'ai fait le test, et c'est bel et bien la valeur sans la touche pressée qui est prise en compte.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Ok Ok beh bonne chance ! ^^

  18. #18
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Bon, tout ce que j'ai trouvé pour limiter la casse, c'est d'allonger les champs concernés.
    Mais c'est quand même pénible...
    J'irais voir sur le site de Mozilla, il doit y avoir un endroit pour la soumission de bugs.

    Après tests, le bug apparait:
    Firefox 3 : oui
    IE 7 : non
    Safari : non
    Chrome : non
    Opera : oui

  19. #19
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Ce n'est pas forcément un bug, ça peut être un choix. IE7, FF3, Opera 9 et Safari 3 ont des comportements différents.

  20. #20
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Oui, ce n'est certainement pas un bug, mais c'est un choix discutable.

Discussions similaires

  1. show/hide un div en fonction du valeur de l'input text
    Par stomerfull dans le forum jQuery
    Réponses: 4
    Dernier message: 07/05/2010, 16h36
  2. Débutante, Récupérer valeur d'un input texte
    Par selinav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2010, 15h58
  3. récupérer la valeur d'un input text après modification
    Par Tellounet dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/05/2009, 09h30
  4. Valeur par défaut input text
    Par nicomax34 dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2009, 19h03
  5. Réponses: 3
    Dernier message: 28/03/2008, 16h51

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