1 pièce(s) jointe(s)
Navigation clavier buggée (event+key)
Bonjour
Je m'entraine au langage javascript et pour cela ai créé une barre de navigation js avec menu déroulant, exploitant le clavier et les events.
Tout se passe bien lors de la navigation à la souris. Au clavier, c'est autre chose. Je me heurte à deux problèmes face auxquels je tourne en rond.
Sous firefox, sur le premier lien (première rubrique "parente"), la nav ne se déploie pas. Elle se déploie en appuyant sur alt ou lorsque j'ai parcouru toute la nav et reviens au début.
Sous IE 7, le problème n'apparait pas au début, par contre, lorsque j'ai parcouru une fois la nav et recommence. C'est comme si mon code bouclait; IE rame puis plante.
Le fichier de test est en pièce jointe. Si quelqu'un a du temps pour jeter un oeil...
Merci
1 pièce(s) jointe(s)
problème de ciblage du DOM?
Bonjour,
J'ai tenté une approche pas-à-pas simplifiée et le problème apparait clairement dans le fichier joint.
Mais je vais tenter d'expliquer sommairement.
Sous firefox comme sous IE, il semble impossible de cibler la première balise <a> via un keydown. Si j'affiche les balises détectées, cela affiche HTML puis la deuxième balise A, sous firefox, BODY puis A, sous IE. Ce comportement donne l'impression de "sauter" un élément. Est-ce que cela revient à rendre ma tentative de navigation au clavier caduque ou y-a-t'il quelque chose dans la gestion du dom que je n'ai pas compris?
Si quelqu'un peut éclairer ma lanterne...
Merci
1 pièce(s) jointe(s)
Bug du moteur DOM/javascript de Firefox?
Bonjour,
Merci pour la suggestion. Après test sous IE, Chrome, Opéra et Firefox, l'incohérence n'apparait plus que sous Firefox avec le code suivant:
Code:
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 28 29 30 31 32 33 34 35
|
function main() {
document.onkeydown = function(event)
{
if (typeof event == "undefined" ) event = window.event;
actif(event);
}
}
function listener(obj,evType,fn)
{
if(obj.addEventListener)
{
obj.addEventListener(evType,fn,false);
}
else if(obj.attachEvent)
{
obj.attachEvent("on"+evType,fn) ;
}
}
function actif(e)
{
var el= e.target||e.srcElement;
if(!el.tagName)
{
el=el.parentNode;
}
if(el.tagName == 'A')
{
alert(el.tagName);
}
} |
avec ce contenu html
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| <body>
<dl>
<dt>
<a id="bloc1" href="#">lien</a>
</dt>
<dd>
<ul>
<li><a id="thumb1" href="#">lien</a></li>
</ul>
</dd>
</dl>
</body> |
Il n'arrive pas à "stopper" sur la balise a du dt. currentTarget, à la place de target, renvoie undefined ou HTML si j'ajoute ".documentElement.tagName".
Peut-il s'agir d'un problème de propagation/bouillonnement ou bel et bien d'un bug firefox sachant que les autres navigateurs renvoient bien "A" comme tagName, que ce soit IE, Chrome ou Opéra?
Si quelqu'un peut tester mon fichier html sous d'autres navigateurs que firefox 3.6.8, IE 7, Opéra 10.61 et Chrome 5.0. La navigation se fait par la touche tab ou maj+fleche.
Merci