2009-12-15 4 views
2

Je suis en train de déboguer une application pour IE8 (après IE6, IE7 maintenant IE8). Je suis allé recevoir un bug dans une de mes interfaces lorsque nous faisions une action sur une liste déroulante et je me demandais pourquoi cela ne se passait pas avant. J'ai finalement découvert qu'une liste déroulante (ou un select) appelant une méthode nommée "role()" directement n'était pas supportée.IE8 - JavaScript dropdown onchange appelant "role()" provoque une erreur

Est-ce que quelqu'un sait pourquoi?

Voici un exemple du bug:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<script type="text/javascript"> 
function rolea(dropdown){ 
    alert("value"); 
    //role(); 
} 

function role(){ 
    alert("value"); 
} 
</script> 
</head> 
<body> 

<select onchange="role()" name="select1"> 
    <option>a</option> 
    <option>b</option> 
</select> 
</body> 
</html> 

Si nous appelons "rôle()" ça ne marche pas et je reçois l'erreur: ligne: 18 Erreur: Objet n » t soutenir cette action

Lorsque j'appelle "rolea()" cela fonctionne et l'alerte JavaScript apparaît. Et aussi si j'essaie d'appeler "role()" de "rolea()" cela fonctionne aussi.

Répondre

4

IE8 prend en charge la technologie d'assistance, qui définit les fonctionnalités d'accessibilité via l'attribut "role" et "aria" sur les nœuds. Le rôle est un mot réservé dans IE, à l'intérieur de la portée DOM.

Si vous faites <select onchange="alert(typeof(role))" name="select1">, vous verrez que c'est une chaîne. Essayer d'exécuter une chaîne en tant que fonction provoque une erreur. (Pour que l'alerte fonctionne, supprimez la déclaration de la fonction de rôle et affichez-la en action).

Vous pouvez lire ici plus http://dev.w3.org/html5/spec/Overview.html#annotations-for-assistive-technology-products-aria

+0

Wow, merci pour l'explication. – Nordes

+0

Je me serais attendu dans IE8 "mode standards IE8" que ce genre de truc hacky * magical * portée aurait disparu. Pouah ... oh bien. – scunliffe

Questions connexes