11523 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Le problème est visible ici : http://chasseautresor-ng.0707a.net/jol_stock/Chasse_99.html

Si on clique sur une case (non grisée) des deux grilles alors la case prend un fond jaune et garde le focus tant qu'on ne rentre pas de caractère.
Enfin... sous FireFox et sous Chromium... parce que sous IE8 (et probablement aussi IE9), cela ne... marche pas.

Code html d'une case :
<td role="textbox" tabindex="0" class="mad" onclick="clickmad(this)" onkeydown="kpmad(this,'L138',event)" id="mad_11_3">&nbsp;</td>

Et pour ce qui est du javascript, je fais tout simplement:
function clickmad(c){
...	
	c.focus();
...}

J'ai fouillé un peu le web pour trouver une sorte de contournement qui suggère de
setTimeout(function() { c.focus(); }, 10);

Alors... bon... je venais voir si vous connaîtriez pas mieux car... ben... moi... les résolutions par timeouts... je ne trouve pas cela très... hmmm...
esthétique:! Smiley lol
J'ai une question sans doute idiote, mais normalement, un élément focusable qui est cliqué, qu'il le soit nativement ou explicitement grâce à tabindex=0, n'est pas censé prendre le focus automatiquement sans qu'il y ait besoin de script ?
Tu as absolument raison QuentinC. Il n'y a pas besoin de gérer onclick pour setter le focus.

J'ai bien stupidement voulu simplifier le code écrit ci-dessus pour les besoins d'aide.
Dans la réalité, je ne gère pas l'événement onclick, c'est le onkeydown que je gère et qui, le cas échéant, doit donner le focus à la case suivante.

Et c'est cela qui ne fonctionne pas avec IE8.

Bon, en fait, je crois avoir trouvé le problème d'IE avec cela.

En fait le tabindex et le role ne suffisent apparemment pas à IE pour "Bien" comprendre que l'élément est focus-able.
J'ai depuis rajouté un contenteditable="true" à toutes mes balises <TD>
Et depuis, automagiquement, IE est content et répond comme il faut à mes ordres de focus.

Bon... cela me crée un autre problème avec Chrome et FireFox... mais... de celui-là, je m'en acomoderai.