Bonsoir,
Ce n'est aujourd'hui plus déconseillé au seul prétexte que ce soit du javascript, ou en tout cas de moins en moins en évoquant seule cette raison.
Si onchange est déconseillé, c'est parce qu'il risque de faire perdre le focus de l'élément de formulaire dans lequel on se trouve à un moment particulièrement inattendu: au beau milieu de la frappe ou de la sélection.
L'exemple classique est celui de la zone déroulante qui sert de menu de navigation :
<select onchange="window.location=this.value;">
Si on navigue au clavier, le simple fait d'appuyer sur flèche bas dans certains navigateurs pour faire son choix déclenche immédiatement le changement de page. Si on n'a pas de souris, on ne peut donc pas naviguer à une autre page que celle qui est juste au-dessus ou au-dessous de l'élément actuellement sélectionné.
De même, il faut éviter de déplacer le focus, par exemple à une sous-liste dépendante.
<select id="categ" onchange="this.form.elements['souscateg'].focus()">
Il faut aussi éviter de modifier l'élément qui a le focus. Pour ce cas-ci, je pense notamment aux suggestions automatiques (Oui google search, suivez mon regard)
Par contre, dans le cas de sous-listes dépendante, rien ne t'interdit de précharger des données sur le onchange par exemple, ou de modifier des styles, ou de modifier le contenu d'un div qui se situe ailleurs dans le DOM. Ca ça ne poserait pas de problème.
En gros, ce n'est pas interdit de l'utiliser, mais il faut faire très attention de ce qu'on fait avec.
En ce qui concerne onclick, il y a moins de contre-indications. Historiquement, onclick ne marchait qu'à la souris et il était donc déconseillé parce qu'inutilisable en navigation clavier. Ca a un peu changé: onclick est déclenché quand on appuie sur entrée sur les liens et les éléments de formulaire dans pratiquement tous les navigateurs. Pour que les autres éléments dotés de onclick soient atteignables au clavier, il doivent aussi être rendus focusables avec tabindex=0 ou -1 (j'ai un doute maintenant), mais surtout pas avec tabindex=X avec X>0.
Modifié par QuentinC (22 Mar 2013 - 21:29)