Question

Pour le code ci-dessous, je rencontre des problèmes avec IE. Le deuxième paramètre transmis à la fonction doit être une référence à l'élément sur lequel vous avez cliqué. Cela fonctionne très bien dans FF et Safari, mais lorsque je l'ai testé dans IE7, il y a des erreurs. IE semble récupérer l’élément (comme on le voit dans la console), mais chaque fois que j’essaie de faire quoi que ce soit, j’obtiens le message d'erreur:

& "L'objet ne prend pas en charge cette propriété ou cette méthode &";

Merci pour l'aide.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>  
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>   
<script language="javascript" type="text/javascript">   
    var Test = {            
        doIt: function(str, btn) {  
            console.log(str);
            console.log(btn);               
            if (btn.hasClassName('red')) {
                console.log('has red');         
            } else {
                console.log('doesn\'t');
            }           
        }   
    };  
</script>   
<a href="#" onClick="Test.doIt('hello', this)" class="red">Test</a> 
</body></html>
Était-ce utile?

La solution

Le problème est que btn n’a pas automatiquement la méthode hasClassName - c’est une extension Prototype.

Pour étendre votre élément avec des fonctions d'extension de prototype , ajoutez cette ligne en haut de doIt():

btn = $(btn); // Extends element with Prototype functions.

Votre code devrait fonctionner à partir de là.

Autres conseils

En effet, lors de l'utilisation de Prototype, les éléments ne sont pas automatiquement étendus avec les fonctions de prototype lors du chargement de page dans IE, ils doivent en particulier passer par un appel $() pour étendre les éléments avec ces méthodes. Ajoutez ceci au sommet de votre fonction pour la faire fonctionner dans IE.

doIt : function(str, btn) {
    btn = $(btn);
}

Modifier: Pour clarifier, dans tous les navigateurs autres que IE 7 (iirc) et inférieur, les éléments HTML seront automatiquement prototypés, mais dans IE < = 7, ils doivent passer par le < => fonction pour appliquer ces prototypes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top