Salut kzone,
kzone a écrit :
peut-on rendre tout élément 'focusable' !?
La réponse est non. Si par exemple, tu mets :
function test()
{
var oP = document.getElementsByTagName('p')[0];
oP.onfocus = function() { alert('coucou'); }
}
window.onload = test;
L'alerte n'apparaîtra jamais et ce code, bien que le validateur ne bronchera pas, est invalide (tu peux vérifier en mettant un onfocus direct dans la balise et en passant la page au validateur) alors que :
function test()
{
var oP = document.getElementsByTagName('p')[0];
oP.onmouseover = function() { alert('coucou'); }
}
window.onload = test;
... est valide et fonctionne.
On retrouve tout cela dans la DTD XHTML 1.0 Strict par exemple...
On a deux entités récapitulant les gestionnaires d'événements :
<!ENTITY % [b][#red]events[/#][/b]
"onclick %Script; #IMPLIED
ondblclick %Script; #IMPLIED
onmousedown %Script; #IMPLIED
onmouseup %Script; #IMPLIED
[b][#green]onmouseover[/#][/b] %Script; #IMPLIED
onmousemove %Script; #IMPLIED
onmouseout %Script; #IMPLIED
onkeypress %Script; #IMPLIED
onkeydown %Script; #IMPLIED
onkeyup %Script; #IMPLIED"
>
...
<!ENTITY % focus
"accesskey %Character; #IMPLIED
tabindex %Number; #IMPLIED
[b][#green]onfocus[/#][/b] %Script; #IMPLIED
onblur %Script; #IMPLIED"
>
Comme on peut le voir, onfocus et onblur sont séparés des autres...
Lorsqu'on passe sur l'élément p, on a :
<!ENTITY % [b][#blue]attrs[/#][/b] "%coreattrs; %i18n; %[b][#red]events[/#][/b];">
...
<!ELEMENT p %Inline;>
<!ATTLIST p
%[b][#blue]attrs[/#][/b];
>
... qui n'inclus pas onfocus...
Le soucis, c'est que, si on place un onmouseover sur un paragraphe, la navigation clavier est impossible pour faire apparaître l'alerte donc, quand bien même le focus fonctionnerait sur un navigateur, ce qui n'est pas impossible, il faut éviter de modifier le comportement d'un élément qui n'est pas prévu pour cela sous peine de nuire à l'accessibilité.
a écrit :
Par contre au niveau de "gérer" 40 images d'une page ou tout utilisation 'abusive' de javascript , j'ai quelque réticence ...
Je crois que l' javascript doit rester un "apport" ponctuel et non un moyen coté client , et c'est bien parcequ'il s'exerce coté client .
Je ne crois pas que l'on doit gérer un site coté client mais coté serveur ...
Pour ce qui est de la négociation de contenu, on est bien d'accord sur le fait que ça doit être géré du côté serveur. En revanche, si ce contenu est considéré comme optionnel (ex.: diaporama), on peut avoir recours au JS.
On peut se servir de JS autrement qu'en simple apport ponctuel mais il faut impérativement que cette fonctionnalité soit facultative...
Vu qu'on parlait d'échanges client/serveur, Ajax peut même améliorer l'accessibilité lorsqu'on a beaucoup de contenu optionnel... Il permet, par exemple, de temporiser le chargement du contenu plutôt que de tout balancer d'un bloc, en agissant suivant les actions de l'utilisateur.