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 :

tabulations, shift et textarea


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut tabulations, shift et textarea
    Bon, que je vous explique...

    Je cherche à faire une fonction javascript pour qu'appuyer sur la touche de tabulation alors qu'un textearea à le focus insère effectivement une tabulation dans ce textearea. De la manière la plus propre et la plus pratique, bien sur.

    Eùh, oui, aussi, habituellement j'essaye de faire une version pour Firefox et une autre pour IE, mais dans le cas présent, seule la partie Firefox m'interresse.

    Donc, j'ai commencé par simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function doTab(elem, even) {
    	if (String.fromCharCode(even.which)=="\t") {
    		elem.value += "\t";
    	}
    }
    avec un onKeyDown="doTab(this, event);" dans le textarea concerné.

    Bon, ça marche bien (Je développerais quand même plus tard pour que la tabulation soit affichée à l'endroit où se trouve le curseur, mais passons), sauf que ça n'empêche pas la fonction "normale" de la touche tabulation d'avoir lieu.

    Alors bon, nouvelle tentative
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function doTab(elem, even) {
    	if (String.fromCharCode(even.which)=="\t") {
    		elem.value += "\t";
    		elem.focus();
    	}
    }
    toujours onKeyDown.
    Seulement là, ça ne change rien, parce que l'appel à focus() à lieu avant. J'essaye onKeyUp, mais dans ce cas, on a changé de champ avant que ça ait appelé la fonction.

    Ruse de sioux, j'essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function doTab(elem, even, eid) {
    	if (String.fromCharCode(even.which)=="\t") {
    		elem.value += "\t";
    		document.getElementById(eid).focus();
    	}
    }
    en passant à la fonction onKeyDown, l'id du champ précédent le textarea. Comme ça, une fois la valeur modifiée, ça met le focus sur le champ prédécent, et donc, la tabulation me ramène sur le champ courant.

    Oui mais! Appuyer simultanément sur les touches shift et tabulation donne un résultat absolument identique, à ceci près qu'avec le changement de focus, on se retrouve désormais deux champs plus haut. Pas glop. Et là, je sèche.

    Donc voilà. Quelqu'un connaitrait-il un moyen de différencier tab de shift+tab, voire de parvenir à ce résultat d'une autre manière?

    Merci d'avance.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Eh bien, finalement, j'ai trouvé tout seul la réponse à mon problème ^^

    Il suffit d'utiliser deux fonctions et un temporisateur...
    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
    function doFocus(elem, position) {
    	elem.focus();
    	elem.selectionStart = position;
    	elem.selectionEnd = position;
    }
     
    function doTab(elem, even) {
    	if (String.fromCharCode(even.which)=="\t") {
    		var begin = elem.selectionStart;
    		var end = elem.selectionEnd;
    		elem.value = elem.value.substring(0, begin)+"\t"+elem.value.substring(end, elem.value.length);
    		var position = end-(end-begin)+1;
    		setTimeout(doFocus, 10, elem, position);
    	}
    }
    Explication de texte... la fonction doFocus donne simplement le focus à l'élément concerné, et place en prime le curseur à la position indiquée en paramètre.
    La fonction doTab, elle, ajoute une tabulation à la position où se trouve le curseur (s'il y a du texte séléctionné, celui-ci est remplacé), puis attends un centième de seconde (le temps que le champ suivant prenne le focus) pour lancer doFocus en indiquant l'élément courant et la nouvelle position du curseur...

    Il suffit ensuite de placer onKeyDown="doTab(this, event);" dans chacun des textareas (voire des input type texte) où l'on souhaite pouvoir insérer une tabulation.

    Bon, je ne garanti pas le résultat si l'utilisateur s'amuse à maintenir la touche tabulation enfoncée, mais c'est déja pas mal.
    Tant que j'y suis, je vais essayer de faire marcher ça pour IE... Je vous tiens au courant.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    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 doFocus(elem, position) {
    	elem.focus();
    	elem.selectionStart = position;
    	elem.selectionEnd = position;
    }
     
    function doTab(elem, even) {
    	if (String.fromCharCode(even.which)=="\t") {
    		var scrollbar_mem = elem.scrollTop ;
    		var begin = elem.selectionStart;
    		var end = elem.selectionEnd;
    		elem.value = elem.value.substring(0, begin)+"\t"+elem.value.substring(end, elem.value.length);
    		var position = end-(end-begin)+1;
    		setTimeout(doFocus, 10, elem, position);
    		elem.scrollTop = scrollbar_mem ;
    	}
    }
    Avec petit rajout dans le cas de scrollbar présent

    Nico

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

Discussions similaires

  1. espace ou tabulation?
    Par caribou_belle dans le forum Langages de programmation
    Réponses: 27
    Dernier message: 05/10/2003, 11h57
  2. tabulation sur champs de saisie
    Par xClyde dans le forum Flash
    Réponses: 2
    Dernier message: 25/09/2003, 16h49
  3. Taille des tabulations dans un TMemo ?
    Par dergen dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/01/2003, 19h38
  4. Comment imprimer des tabulations ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 11h30
  5. [VB6] Touche de tabulation
    Par BernardMatthey dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 26/11/2002, 22h06

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