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 :

D�sactiver la touche Backspace ?


Sujet :

JavaScript

  1. #1
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut D�sactiver la touche Backspace ?
    Bonjour,

    Je voudrais savoir comment faire pour d�sactiver la touche
    Backspace mais seulement lorsque celle-ci reste enfonc�e.
    J'ai trouv� ce tuto:

    http://unixpapa.com/js/key.html

    o� il est expliqu� que lorsqu'une touche reste enfonc�e �a g�n�re
    un auto-repeat.
    Malheureusement je n'arrive pas � trouver comment faire pour d�tecter
    cet auto-repeat, d'autant plus que �a varie selon les browser (je suis sous Firefox/Linux).

    Quelqu'un pourrait m'aider ?

    Merci.

  2. #2
    Membre chevronn�
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par d�faut
    En somme, tu as un champ texte, et tu veux qu'il soit possible d'effacer au maximum 1 caract�re par seconde par exemple ?


    ... parfois j'en viens vraiment � me demander quel genre d'interfaces de tordus vous faite subir � vos visiteurs ( Mais bon, je pr�sume que tu dois �tre dans un cas tr�s particulier, du genre un jeu en online utilisant des combinaisons de touches )

    L'id�e c'est de faire un �v�nement onmousedown, qui va comparer le temps actuel � celui de la derni�re touche appuy�e qui se trouve dans une variable.

    Si le temps est inf�rieur � X ms, faire l'action, sinon, return false;


    Tu peux aussi coupler le tout avec onmouseup, afin que onmouseup r�-initialise une variable qui s'occupe de g�rer si la touche � d�j� �t� press�e ou pas.

  3. #3
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    intercepte le keycode 8 sur le keypress
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  4. #4
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut
    En somme, tu as un champ texte, et tu veux qu'il soit possible d'effacer au maximum 1 caract�re par seconde par exemple ?
    Oui en gros c'est �a.
    intercepte le keycode 8 sur le keypress
    C'est d�j� fait mais lorsque je reste appuy� sur la touche trop longtemps, le backspace fonctionne. Ou alors je neutralise compl�tement le backspace mais
    c'est pas top.
    En fait ce qui complique encore les choses c'est que je developpe �a en tant que plugin pour CKeditor (editeur wysiwyg) et je dois utiliser l'API qui va avec.
    L'id�e du onmousedown est int�ressante mais �a risque d'�tre coton � impl�menter.
    N'y a t-il pas un autre moyen ?

  5. #5
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    Citation Envoy� par tintin72 Voir le message
    >En somme, tu as un champ texte, et tu veux qu'il soit possible d'effacer au maximum 1 caract�re par seconde par exemple ?

    Oui en gros c'est �a.
    Ouais ben il faut pas. L'utilisateur devrait effacer ses caract�res � la vitesse o� il a l'habitude de le faire. En fait, sur cette question-l� il ne faut rien faire du tout, c'est tr�s bien tel que.

    Citation Envoy� par tintin72 Voir le message
    L'id�e du onmousedown est int�ressante mais �a risque d'�tre coton � impl�menter.
    N'y a t-il pas un autre moyen ?
    onkeydown, je pense. Il faudrait que je v�rifie, mais je ne suis pas s�r qu'un timer soit n�cessaire. �couter onkeydown et onkeyup sur le backspace, et ne laisser passer qu'un seul onkeypress entre les deux, devrait suffire.
    C'est un peu compliqu� � g�rer, mais JavaScript est suffisamment puissant pour �a.
    Je suis une tanche en JavaScript donc je ne sais pas s'il y a plus simple, mais j'en doute : JavaScript est un langage utilis� pour manipuler des pages web, pas pour faire des GUIs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut
    �couter onkeydown et onkeyup sur le backspace, et ne laisser passer qu'un seul onkeypress entre les deux, devrait suffire.
    Oui c'est une bonne id�e mais comment faire �a ?
    Sans compter que onkeypress r�agit aussi � l'appuie d'une touche (comme
    onkeydown) donc bonjour le bazard (ils auraient pas pu faire un event onkeyhold ? ).

    Bref, pour l'instant j'en suis l�:
    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
    18
    function stop(ev)
    {
      ev.preventDefault();
    }
     
    function detectKey(event) { 
     
        switch(event.keyCode)
        {
          case 8:
     
    	setTimeout(function(){stop(event)}, 200);
          break;
        }
    } 
     
    var textarea = document.getElementById('text'); 
    textarea.addEventListener("keypress", detectKey, false);
    Je pensais que ev.preventDefault(); bloquerait le keypress mais non.
    Quelqu'un aurait une id�e ?

  7. #7
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    Citation Envoy� par tintin72 Voir le message
    Oui c'est une bonne id�e mais comment faire �a ?
    Ben, en JavaScript. C'est parti !

    Citation Envoy� par tintin72 Voir le message
    Sans compter que onkeypress r�agit aussi � l'appuie d'une touche (comme
    onkeydown) donc bonjour le bazard
    Ah. Euh. Bon, alors �couter onkeypress et onkeydown pour le d�but, et n'en laisser passer qu'un de chaque avant de voir passer onkeyup.

    Citation Envoy� par tintin72 Voir le message
    (ils auraient pas pu faire un event onkeyhold ? ).
    Ils auraient pu, mais pour l'instant c'est pas fait, et de mani�re g�n�rale le JavaScript des navigateurs n'est pas fait pour de la UI.

    Citation Envoy� par tintin72 Voir le message
    Je pensais que ev.preventDefault(); bloquerait le keypress mais non.
    Quelqu'un aurait une id�e ?
    Je ne comprends pas ce que tu essaies d'obtenir en stoppant un event 200 millisecondes apr�s qu'il ait �t� enti�rement trait� et n'int�resse plus qui que ce soit ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut
    Ah. Euh. Bon, alors �couter onkeypress et onkeydown pour le d�but, et n'en laisser passer qu'un de chaque avant de voir passer onkeyup.
    Oui mais comment on fait pour ne laisser passer qu'un keypress/keydown ?
    Les variables static n'existent pas en JS et je suis pas s�r que �a soit la solution.
    Je ne comprends pas ce que tu essaies d'obtenir en stoppant un event 200 millisecondes apr�s qu'il ait �t� enti�rement trait� et n'int�resse plus qui que ce soit ?
    D�sol�, moi aussi je suis une tanche en JS mais en gros l'id�e c'�tait que
    lorsque la touche backspace reste appuy�e plus de 200 ms, on appelle la fonction stop() en lui passant l'objet event pour qu'elle puisse bloquer la touche avec la methode preventDefault().
    Mais bon, j'ai s�rement d� rater quelque chose.

    Si quelqu'un pouvait m'�clairer.

  9. #9
    Membre chevronn�
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par d�faut
    Et bien pour le truc des 200ms, suffit de faire lancer une instance de timer sur le onkeypress avec un interval de 200ms.

    Si le onkeyup est apell� avant l'ex�cution du timer, supprimer le timer.

  10. #10
    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 : 55
    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

    Une fonction stop()
    Autant d�clarer une variable window tant qu'� faire...

    Je pense que le plus simple (sic ) serait de passer par un flag (un bool�en) que tu mets � true au keydown de la touche backspace et � false au keyup.
    Il me semble (� v�rifier quand m�me) que l'appui prolong� d'une touche relance le keydown, donc au d�clenchement du keydown, tu testes la valeur du flag et la touche press�e, si les deux sont true, tu inhibe l'appui.
    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

  11. #11
    Membre chevronn�
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par d�faut
    Vrai, sauf que quelqu'un a parl� de seulement lancer l'action dans le cas ou la touche �tait "onHold", donc on doit attendre les 200ms pour s'assurer que la touche est maintenue, et non pas seulement appuy�e et relach�e.

  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 : 55
    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
    Oui, c'est pour �a que tu initialises le flag. Si la touche vient d'�tre enfonc�e (keydown) le flag passe � true, lorsque la touche est rel�ch�e (keyup), le flag est mis � false.
    Entre les deux, tu continues � d�tecter le keydown, s'il est d�clench� et que le flag est � true, c'est que tu es sur un cas de "onhold"
    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 chevronn�
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par d�faut
    Brilliant !

    Je n'y avais simplement pas pens�. En plus ca respecte le param�tre de r�p�tition des touches du syst�me de l'utilisateur

  14. #14
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut
    J'ai finalement trouv� une solution acceptable pour mon appli.
    Tant que le user utilise le backspace au coup par coup pas de probl�me,
    mais s'il reste appuy� + de 200ms une boite de dialogue appara�t et bloque la touche.
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    var timer;
     
    function stop()
    {
      alert("Doucement sur le backspace ;-)");
    }
     
    function keyUp(event)
    {
        switch(event.keyCode)
        {
          case 8:
    	clearTimeout(timer);
    	break;
        }
    }
     
    function keyPress(event) { 
     
        switch(event.keyCode)
        {
          case 8:
    	timer = setTimeout(function(){stop()}, 200);
          break;
        }
    } 
     
    var textarea = document.getElementById('text'); 
    textarea.addEventListener("keypress", keyPress, false);
    textarea.addEventListener("keyup", keyUp, false);
    Mais je suis pas s�r pour la variable globale timer, c'est pas tr�s �l�gant.
    Y aurait-il une autre mani�re de passer l'instance du timer ?

  15. #15
    Membre chevronn�
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par d�faut
    Tel un enfoir� de premi�re, je vole la solution de Bovino, et j'en retire la gloire !

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    var pressed;
     
    function stop()
    {
      alert("Doucement sur le backspace ;-)");
    }
     
    function keyUp(event)
    {
        if(event.keyCode == 8)
            pressed = false;
    }
     
    function keyPress(event)
    { 
        if(event.keyCode == 8)
            if(pressed===true)
                stop();
            else
                pressed = true;
    } 
     
    var textarea = document.getElementById('text'); 
    textarea.addEventListener("keypress", keyPress, false);
    textarea.addEventListener("keyup", keyUp, false);

    Edit:
    avoir "stop" comme nom de fonction me parrait une mauvaise id�e. Ca doit certainement �tre un nom r�serv�...

  16. #16
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut
    avoir "stop" comme nom de fonction me parrait une mauvaise id�e. Ca doit certainement �tre un nom r�serv�...
    Oui, bien vu en effet. (Je l'ai renomm� "stopBackspace" ...moins risqu�).

    Sinon pour la variable globale y a une autre solution ou on peut laisser comme �a ?

Discussions similaires

  1. Cmt D�sactiver une touche du KB ?!
    Par microzen dans le forum C++
    R�ponses: 6
    Dernier message: 17/10/2005, 23h57
  2. [D�butant] [JTextArea] D�sactiver une touche
    Par picomz dans le forum Composants
    R�ponses: 2
    Dernier message: 09/06/2005, 16h52
  3. comment d�sactiver la touche windows ?
    Par mAdY dans le forum Biblioth�ques tierces
    R�ponses: 2
    Dernier message: 13/04/2005, 10h24
  4. D�sactiver la touche Windows
    Par rolkA dans le forum Windows XP
    R�ponses: 2
    Dernier message: 15/10/2004, 20h59
  5. D�sactiver les touches F1, F2, F3, F4, F5 dans IE
    Par ZiZouJH dans le forum Flash
    R�ponses: 7
    Dernier message: 17/02/2003, 09h59

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