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 :

Corriger un bug de IE11


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut Corriger un bug de IE11
    Bonjour,

    Internet Explorer bug dans le cas suivant:
    - Un champ de formulaire de type input ou textarea a le focus et est affecté de l'attribut readonly,
    - Si ce champ est vide et que j'appuie sur la touche backspace le navigateur revient à la page précédente comme avec le bouton de retour arrière (alt+gauche)
    C'est plutôt gênant!
    Pour pallier à ce défaut, j'ai écrit le bout de code suivant qui me pose un problème lorsque j'ai besoin d'utiliser l'événement blur.
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "use strict";
     
    // Correction d'un bug de certains navigateurs (testé avec IE11, à vérifier sur les autres versions et les autres navigateurs)
    var reads	= document.querySelectorAll('input[readonly]'),
    	others	= document.querySelectorAll('input:not([readonly]):not([type="submit"]):not([disabled])'),
    	n		= reads.length;
    for (let i=0; i<n; i++) {
    	reads[i].addEventListener('focus', function(e) {
    		this.blur();
    		if (others.length) others[0].focus();
    	}, false);
    }

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Je n'ai pas IE11 mais pour le problème pourquoi ne pas intercepter la touche backspace pour annuler son effet lorsque la textearea ou la input est vide ?

  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    "use strict" t'oblige a déclarer les variables, others et n ne le sont pas.
    Tu utilises des déclarations de variables différentes, un coup var, l'autre let, ce dernier n'est supporté par IE que depuis la version 11.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    "use strict" t'oblige a déclarer les variables, others et n ne le sont pas.
    Moi aussi je me suis déjà fait avoir par ça (il n'y a qu'une seule fois le mot clé "var") mais elles sont déclarées (et initialisées) : une seule fois le mot clé "var" + déclarations séparées par une virgule

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    @Beginner. , vue l’indentation, les virgules, me sont passées sous le nez
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour
    Citation Envoyé par ProgElecT
    vue l’indentation, les virgules, me sont passées sous le nez
    pour une telle déclaration de variables il existe une « convention », mais chacun fait ce qui lui plait, qui est de mettre la virgule en début de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var reads = document.querySelectorAll('input[readonly]')
      , others = document.querySelectorAll('input:not([readonly]):not([type="submit"]):not([disabled])')
      , n = reads.length;
    c'est normalement plus lisible mais bon, idem pour la déclaration des objets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var Individu = {
        "nom": "Durand"
      , "Prenom": "Jean"
      , "Age": "ça change tout le temps"
    }
    dans ce cas c'est pour facilité la modification de celui-ci.

    Pour en revenir au sujet, qui est une continuité de cette discussion je dirais qu'il faut bien comprendre ce que fait ce script, hormis pourrir la vie de moimp
    • on récupère tous les éléments de type <input> qui ont l'attribut readonly posé, d'une part ;
    • on récupère d'autre part ce qui ne l'ont pas ;
    • on affecte à chaque éléments du 1er groupe( les readonly donc) un fonction qui leur fait perdre le focus, quand il l'obtient, et qui le place sur le 1er élément du 2éme groupe ( les autres <input>).

    Donc on n'aura JAMAIS accès à ces champs.

    - Si ce champ est vide et que j'appuie sur la touche backspace le navigateur revient à la page précédente comme avec le bouton de retour arrière (alt+gauche)
    que ce passe t-il si il n'y pas de champs « modifiable » ?


    // Correction d'un bug de certains navigateurs
    J'aimerais savoir de quelle bogue on parle.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Je vais essayer de répondre à toutes vos remarques:
    1. @ProgElecT: J'utilise let à l'intérieur de la boucle et var à l'extérieur, suite à un conseil que j'ai eu (où et quand?)
    2. @NoSmoking: Je ne connaissait pas cette convention, elle est intéressante. Désolé mais l'indentation a bougé avec le copier/coller.
    3. @NoSmoking: Effectivement le but n'est pas d'avoir accès aux champs, mais, surtout en mise au point, d'éviter le retour intempestif vers la page précédente.
    4. Si ce champ est vide et que j'appuie sur la touche backspace le navigateur revient à la page précédente comme avec le bouton de retour arrière (alt+gauche)
      Après vérification ceci se produit même si le champ n'est pas vide. C'est bien le bogue dont je parle.
    5. que ce passe t-il si il n'y pas de champs « modifiable » ?
      Condition en ligne 10 de mon code.
    6. J'aimerais savoir de quelle bogue on parle.
      Le retour intempestif à la page précédente qui est justement la raison d'être de ce script.

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

Discussions similaires

  1. [Lazarus] Lazarus semble corriger des bugs de Delphi 6 !
    Par Invité dans le forum Lazarus
    Réponses: 3
    Dernier message: 17/07/2016, 19h17
  2. Réponses: 0
    Dernier message: 13/03/2014, 09h51
  3. MySQL 5.5.25a corrige un bug dans InnoDB
    Par Hinault Romaric dans le forum MySQL
    Réponses: 7
    Dernier message: 19/07/2012, 13h07
  4. Réponses: 13
    Dernier message: 11/06/2010, 10h38
  5. Comment corriger le bug de RightClickSelect du treeview de Delphi 7 ?
    Par bambino3996 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/08/2005, 13h47

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