2017-05-11 11 views
0

Je voudrais obtenir un texte à l'intérieur d'une envergure qui a une classe move. Donc, j'essaie de faire que lorsque vous cliquez sur le bouton, son texte à l'intérieur d'un mouvement de classe est passé à une fonction move comme l'un des arguments. p.s. le code HTML est donné, et je ne peux rien y changer. Y at-il quelque chose qui ne va pas dans mon code js? Le message d'erreur indique "Uncaught TypeError: Impossible de lire la propriété 'innerHTML' de undefined".Comment obtenir un texte à l'intérieur d'une plage avec une classe. (à l'intérieur de pour la boucle)

partie du code HTML;

<div id="my-card"> 


    <div class="card-container"> 
     <div class="card"> 
     <div class="moves"> 
      <button> 
      <span class="move">a</span> <span class="dp"></span> 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
      </button> 
      <button> 
      <span class="move">b</span> <span class="dp"></span> 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
      </button> 
      <button> 
      <span class="move">c</span> <span class="dp"></span> 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
      </button> 
      <button> 
      <span class="move">d</span> <span class="dp"></span> 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
      </button> 
     </div> 
     <img src="icons/fighting.jpg" alt="weakness" class="weakness" /> 
     </div> 
    </div> 
    </div> 

Javascript:

for(var i=0; i<4; i++){ 
       document.querySelectorAll("#my-card .moves button")[i].onclick = function(){ move(document.querySelectorAll("#my-card .moves .move")[i].innerHTML, gameID, playerID) }; 
    } 
+0

vous avez oublié de fermer ('') certains de vos '' s

Répondre

2

Essayez cette

for(var i=0; i<4; i++){ 
    document.querySelectorAll("#my-card .moves button")[i].onclick = 
     function(){ move(this.querySelectorAll(".move")[0].innerHTML, gameID, playerID) }; 
} 

je suis passé votre document.querySelectorAll-this.querySelectorAll.

Ci-dessous un extrait montrant les résultats à la console.

for (var i = 0; i < 4; i++) { 
 
    document.querySelectorAll("#my-card .moves button")[i].onclick = function() { 
 

 
    console.log(this.querySelectorAll(".move")[0].innerHTML) 
 

 
    } 
 
}
<div id="my-card"> 
 

 

 
    <div class="card-container"> 
 
    <div class="card"> 
 
     <div class="moves"> 
 
     <button> 
 
      <span class="move">a</span> <span class="dp"></span> 
 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
 
     </button> 
 
     <button> 
 
      <span class="move">b</span> <span class="dp"></span> 
 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
 
     </button> 
 
     <button> 
 
      <span class="move">c</span> <span class="dp"></span> 
 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
 
     </button> 
 
     <button> 
 
      <span class="move">d</span> <span class="dp"></span> 
 
      <img src="icons/fighting.jpg" alt="Pokemon move" /> 
 
     </button> 
 
     </div> 
 
     <img src="icons/fighting.jpg" alt="weakness" class="weakness" /> 
 
    </div> 
 
    </div> 
 
</div>

+0

Merci pour votre commentaire! J'ai essayé, mais la même erreur est restée ... – Tak

+0

Désolé, votre code a fonctionné, mais je me demande pourquoi je dois utiliser 0 comme index dans 'this.querySelectorAll (". Move") [0] .innerHTML'. Pourquoi n'utilises-tu pas? – Tak

+0

Parce que ** i ** est sur le bouton, configuration de l'événement click. ** this ** est invoqué une fois le bouton cliqué. À ce stade, il demande votre sélecteur, qui peut être un peu, nous sélectionnons donc le premier. – luly