11487 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'essaie de concevoir un script qui consiste à colorer les lettres d'un tableau quand on les saisit au clavier.
Comme je tente de commencer petit, je me suis limitée à la lettre E. Malgré que je pense avoir tout fait pour que ça fonctionne, la couleur ne prend pas quand je saisis "E" dans l'input...


    <table class="boggle">
      <tbody>
        <tr>
          <td id="P">P</td>
          <td id="A">A</td>
          <td id="S">S</td>
          <td id="G">G</td>
        </tr>
        <tr>
          <td id="Q">Q</td>
          <td id="O">O</td>
          <td id="B">B</td>
          <td id="E">E</td>
        </tr>
        <tr>
          <td id="D">D</td>
          <td id="L">L</td>
          <td id="C">C</td>
          <td id="M">M</td>
        </tr>
        <tr>
          <td id="N">N</td>
          <td id="J">J</td>
          <td id="T">T</td>
          <td id="V">V</td>
        </tr>

      </tbody>
    </table>
    <form action="play.php" method="post">
      <input type="text" name="mot" id="mot" maxlength="30" autocomplete="off" autofocus="" onkeypress="keypressed(event);" placeholder="mot">
      <input type="submit" name="ok" value="ok" id="envoimot">
    </form>



    .lettreselectionnee {
      background-color: #ECB445;
    }



    function whichCharIsIt(event) {
      var keynum;

      // identifier le caractère tapé 
      if (window.event) { // IE
        keynum = event.keyCode;
      } else if (event.which) { // Netscape/Firefox/Opera
        keynum = event.which;
      }
      var caracteresaisi = String.fromCharCode(keynum).toLowerCase();
      console.log("test " + caracteresaisi) // FONCTIONNE

      if (caracteresaisi == 'e') {
        console.log("OK") //FONCTIONNE

        var caracteresaisigrille = document.getElementById('E');
        caracteresaisigrille.classList.add("lettreselectionnee"); // NE FONCTIONNE PAS
      }

    function keypressed(event) {
      whichCharIsIt(event);
      isItTheEnd();

    }


J'ai mon script qui est correctement appelé avec un événement onkeypress dans l'input
Et j'ai un retour OK sur console.log("OK") quand je tape E
Toutefois, pas moyen que mon td se voie affecter la couleur définie dans la classe lettreselectionnee...

J'ai fait un pad pour vous faciliter la compréhension
https://plnkr.co/edit/CpNsI7eFFzqQeDI1JgEn?p=preview

Auriez-vous une idée de ce qui dysfonctionne, svp? Smiley ohwell

Un tout grand merci !
Modérateur
Bonjour,

Dans le css tu écris :
.lettreselectionnee {
      background-color: #ECB445;
    }


Par ailleurs on a aussi dans le css :
table.boggle td {
      background-color: #FFFBF3;
    }


Comme table.boggle td est un sélecteur plus fort que .lettreselectionnee, il a la priorité, et du coup la lettre reste avec le fond #FFFBF3, même quand le td qui la contient a la classe .lettreselectionnee.

Pour corriger ça, on peut modifier le sélecteur devant .lettreselectionnee, et écrire par exemple :
table.boggle td.lettreselectionnee {
      background-color: #ECB445;
    }


Amicalement,
Meilleure solution
Bon sang de bois, j'étais sûre que c'était un souci JS et que ma classe lettreselectionnée était censée avoir le dessus parce qu'énoncée en dessous dans la feuille de style ! Smiley sweatdrop

Un immense merci, Parsimonhi !