0
votes

Comment colorer une des 100 boîtes avec un bouton dans un mode modal à l'aide de JavaScript

Juste pour faciliter la tâche, je explique ce que je souhaite faire dans un exemple simplifié.

  • J'ai 100 cases sur mon site à l'aide de Simple HTML / CSS. (Style non montré) Li>
  • J'ai écrit un peu de JS pour ouvrir un modal qui s'ouvre lorsque vous cliquez sur l'une des 100 cases portant la même classe: Class = "Boîtes": Li> ul>

    Le modal a un identifiant de "modal": p> xxx pré>

    lorsque une boîte est cliquée sur le modal apparaît: P>

        //The modal
        <div id="modal">
                <button id="green">Completed</button>
        </div>
    
        //just some boxes         
        <div class="boxes"></div>
        <div class="boxes"></div>
        <div class="boxes"></div>
        <div class="boxes"></div>
        .... 96 more boxes
    
    • Maintenant, je souhaite colorer la boîte qui a été cliquée à l'aide d'un bouton dans le modal qui a été ouvert. Le code qui ne fonctionne pas mais est mon devin la plus proche ressemble à ceci: p> XXX PRE> LI> ul>

      Écriture "Les boîtes [0]" vont colorer la première case, mais ce n'est bien sûr pas ce que je souhaite. Je souhaite colorer la boîte qui a été cliquée. P>

      Merci pour toute entrée. Bonne journée! P>

      sur demande ive SOM SOM SOM SIMPLE HTML em> strong> p>

      //get the coloring button in the modal which has Id of "green".
      
      var coloring = document.getElementById("green");
      
      coloring.onclick = function () {
      boxes[i].style.backgroundColor = "#90EE90";
      //closing the modal after clicking which works
      modal.style.display = "none";
      };
      


2 commentaires

Votre code HTML serait utile. Ajoutez-le ici bro


Ive a ajouté quelques-uns maintenant et mis à jour le poste de sorte que c'est plus clair maintenant. Merci :) @khalidkhan


3 Réponses :


1
votes

Je crois que votre problème est ici. Vous avez: pour (var i = 0; i , mais doit faire référence à boxeslength donc pour (var i = 0; i .

Ce serait une application idéale pour "délégation d'événement". Lire la suite: https://javascript.info/event-Délégation .

Essentiellement, vous mettez le gestionnaire de clic sur le conteneur parent pour toutes vos boîtes, puis utilisez la cible pour pointer sur la case cliquée. Cela vous donne 1 gestionnaire d'événements au lieu de 100.


2 commentaires

Merci pour votre temps. C'était une simple erreur qui ne résout rien. Pardon! :) Ive a mis à jour le message pour plusieurs erreurs maintenant. Merci encore!


Malheureusement oui. L'erreur que j'avais ici était seulement ici. Pas dans mon code d'origine. Merci d'avoir essayé cependant.



1
votes

Conformément à la façon dont j'ai compris votre problème. Vous voulez que la couleur d'arrière-plan affiche sur la case qui a été cliquée pour qu'il affiche le modal. Voici ma solution.

p>

  <div class="container">
  
    <div id="modal">model content
      <div class="close"> x </div>
      <button onclick="changeColor()">green</button>
    </div>
    <div id="innerBox">
      <div class="box 1">box1</div>
      <div class="box 2">box2</div>
      <div class="box 3">box3</div>
      <div class="box 4">box4</div>
    </div>
  </div>


0 commentaires

0
votes

Je l'ai compris en utilisant "ceci": xxx


0 commentaires