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 :

Fonction qui marche pas sous IE


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut Fonction qui marche pas sous IE
    Salut,
    J'ai ce code qui marche parfaitement sous Firefox, mais ne marche pas sous IE :
    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
     
    <script type="text/javascript">
    <!--
    registerEvent = function(on, ev, func, capture) {
    	if (window.addEventListener)
    		on.addEventListener(ev, func, capture);
    	else {
    		if (!on.funcsCounter) on.funcsCounter = 0;
    		on['func'+on.funcsCounter] = func;
    		on.funcsCounter++;
    		on.attachEvent("on"+ev, function() { for(var i=0; i<on.funcsCounter; i++) on['func'+i](); });
    	}
    }
     
     
    window.onload = function() {
    monInput = document.createElement('input');
    monInput.type = "text"; 
    var monInputId = monInput.id = 'mat2';
    monInput.value = 'Y';
    document.body.appendChild(monInput);
    registerEvent(document.getElementById(monInputId), 'focus', function() {this.value='';});
    registerEvent(document.getElementById(monInputId), 'blur', function() {this.value=this.value.toUpperCase();});
    }
     
    // -->
    </script>
    Le problème est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    registerEvent(document.getElementById(monInputId), 'blur', function() {this.value=this.value.toUpperCase();});
    En fait je souhaite lors de la perte du focus mettre en majuscule le contenu du champ. Ce code marche bien sous firefox, mais sous IE cela a une fâcheuse de vider plutôt le champ.

    Quelqu'un peut m'aider?

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Pourtant ceci marche bien sur toutes les plateformes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" onblur="this.value=this.value.toUpperCase();"  />

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Salut,
    c'est un problème de contexte : le this n'est pas celui que tu crois. Je ne sais pas ce que tu cherches à faire avec ton funcsCounter mais j'ai l'impression que tu essayes de simuler un comportement qui, pourtant, existe. On peut très bien attacher plusieurs fonctions au même évènement sous IE.

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    registerEvent = function(on, ev, func, capture) {
        if (window.addEventListener)
            on.addEventListener(ev, func, capture);
        else
            on.attachEvent("on"+ev, func);
    }

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Salut,

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    registerEvent = function(on, ev, func, capture) {
        if (window.addEventListener)
            on.addEventListener(ev, func, capture);
        else
            on.attachEvent("on"+ev, func);
    }

    Avec donc ce code comment mettre en majuscule les données de mon champ lors d'un onblur?

    Merci d'avance

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Ok, je n'y étais pas : sous IE, this est window dans les fonctions d'évènements. Le plus simple est d'utiliser cette méthode, qui est assez connue :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    registerEvent(document.getElementById(monInputId), 'blur', function( event ) {
        var target = event.target || event.srcElement;
        target.value = target.value.toUpperCase();
    });
    event.target c'est pour les navigateurs standards, et event.srcElement c'est pour IE.

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2009, 15h42
  2. marginTop qui marche pas sous Firefox
    Par amestoche dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/02/2008, 15h19
  3. fonction redimensionnement marche pas sous firefox
    Par calitom dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/09/2007, 14h39
  4. Fonction qui ne marche pas sous FireFox
    Par Foudébois dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/11/2006, 14h35
  5. Fonction qui marche sous FF mais pas IE
    Par Oluha dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 14h07

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