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 :

Restaurer la position du curseur sous IE.


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut Restaurer la position du curseur sous IE.
    Bonjour,

    Afin de restaurer la position du curseur d'une DIV éditable j'utilise ce code:

    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
    var savedRange,isInFocus;
    function saveSelection() {
      if(window.getSelection) { //non IE Browsers
        savedRange = window.getSelection().getRangeAt(0);
      } else if(document.selection) { //IE
        savedRange = document.selection.createRange();  
      } 
    }
     
    function restoreSelection() {
      isInFocus = true;
      document.getElementById('myInstance1').focus();
      if(savedRange != null) {
        if (window.getSelection) { //non IE and there is already a selection
          var s = window.getSelection();
          if (s.rangeCount > 0) 
            s.removeAllRanges();
          s.addRange(savedRange);
        } else if (document.createRange) { //non IE and no selection
          window.getSelection().addRange(savedRange);
        } else if (document.selection) { //IE
          savedRange.select();
        }
      }
    }
    Ce code est utilisé pour ajouter du texte contenu dans une textarea dans une DIV éditable myInstance1. Et avec IE cela ajoute le texte au début de la page, donc pas du tout dans la DIV myInstance1.

    Cela marche bien avec Firefox et Chrome.

    Est-ce que quelqu'un sait pourquoi cela ne marche pas avec IE. J'ai regardé avec google et il y en a qui disent qu'il faut utiliser beforedeactivate (IE only) sur l'élément myInstance1. Mais je ne vois pas du tout comment faire.

    Merci.

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Es-tu sûr que le focus() fonctionne sur une div ?
    Le focus() sur un élément HTML est différent selon les navigateurs. Tu peux l'appliquer, selon la spéc W3C, sur ces types : HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement et HTMLAnchorElement.
    Pas sur les éléments div, à priori.

    Enfin, certaines versions d'IE (<= 8 je pense) n'implémentent pas les DOM Ranges. Par contre, ne réinvente pas la roue, il y a déjà des alternatives qui fluctuent sur le net pour répondre à ce besoin. (rangy, ierange, ...)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    J'ai trouvé une solus en ajoutant document.getElementById('myInstance1').focus(); avant savedRange = document.selection.createRange(); :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function saveSelection() {
      if(window.getSelection) { //non IE Browsers
        savedRange = window.getSelection().getRangeAt(0);
      } else if(document.selection) { //IE
        document.getElementById('myInstance1').focus();
        savedRange = document.selection.createRange();  
      } 
    }
    Sinon, rangy provoquait la même erreur: Ajout du texte au début de la page.

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

Discussions similaires

  1. position curseur sous firefox
    Par samplaid dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/09/2008, 23h30
  2. Obtenir la position du curseur dans une Image
    Par bastoune dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/11/2003, 21h02
  3. Position du curseur dans un TMemo
    Par yokito dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/08/2003, 16h35
  4. Position du curseur
    Par gimlithedwarf dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/08/2002, 23h45
  5. Position du curseur dans Edit
    Par MrJéjé dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 17h09

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