recherche

Maison  >  Questions et réponses  >  le corps du texte

"Pourquoi style.backgroundColor n'a-t-il aucun effet ?"

<p>Essayez de changer la couleur d'une cellule en cliquant dessus. </p> <p>La cellule est généralement grise et doit devenir rouge lorsque vous cliquez pour la première fois. Lorsque je clique sur la cellule rouge, elle devrait redevenir grise. </p> <p><br /></p> <pre class="brush:js;toolbar:false;">function changeColor(cell) { var rouge = '#FE2E2E'; var gris = '#E6E6E6'; if (cell.style.backgroundColor == gris) { cell.style.backgroundColor = rouge; } autre { if (cell.style.backgroundColor == rouge) { cell.style.backgroundColor = gris ; } } ; };</pré> <pre class="brush:css;toolbar:false;">#table tr td { largeur : 20 px ; hauteur : 50px ; curseur : pointeur ; couleur d'arrière-plan : #E6E6E6 ; bordure : 1px noir uni ; }</pré> <pre class="brush:html;toolbar:false;"><table class="table table-bordered" id="table"> <corps> <tr> <td onclick="changeColor(this)"></td> <td onclick="changeColor(this)"></td> <td onclick="changeColor(this)"></td> <td onclick="changeColor(this)"></td> <td onclick="changeColor(this)"></td> ≪/tr> </tcorps> </table></pré> <p><br /></p> <p>J'ai aussi essayé <code>.style.bgColor</code>, <code>rgb</code> et <code>if (cell.style.backgroundColor ===</code> , mais cela n'a pas fonctionné non plus. La valeur de la couleur d'arrière-plan de la cellule a été soit transmise dans <em>.backgroundColor</em>:<strong>''</strong>, soit transmise dans <em>. bgColor< /em> : <strong>indéfini</strong>
P粉969253139P粉969253139535 Il y a quelques jours628

répondre à tous(2)je répondrai

  • P粉593536104

    P粉5935361042023-08-25 13:03:07

    Votre code ne fonctionnera pas car lorsque votre code s'exécute pour la première fois, style属性没有设置backgroundColorstyle代表元素的内联样式属性,而你的元素在开始时没有内联样式。当你检查元素的背景是否为redgray时,它既不是红色也不是灰色,因为它没有内联样式(style.backgroundColorest en fait une chaîne vide).

    Vous avez plusieurs options :

    • Utilisez getComputedStyle来查看元素的background-color, qu'il soit défini en ligne ou non.
    • Fournit un cas par défaut qui définira le background-color de l'élément, que l'élément soit déjà défini ou non. (S'il est rouge, passez-le en gris ; sinon, réglez-le en rouge.)

    L'une ou l'autre approche peut atteindre ce dont vous avez besoin, en fonction de la flexibilité dont vous avez besoin dans votre solution, je vous laisse décider.

    répondre
    0
  • P粉239164234

    P粉2391642342023-08-25 12:44:41

    La valeur obtenue à partir de style.backgroundColor peut ne pas être renvoyée dans le même format que lorsqu'elle est définie ; elle est rendue dans le format souhaité par le navigateur.

    Une manière peu changeante consiste à stocker un drapeau sur l'élément (voir commentaires) :

    function changeColor(cell) {
      var red = '#FE2E2E';
      var grey = '#E6E6E6';
      
      // 获取标志;如果不存在,则为假值
      var flag = cell.getAttribute("data-grey");
    
      if (!flag) {
        // 变为灰色
        cell.setAttribute("data-grey", "true");
        cell.style.backgroundColor = red;
      } else {
        // 不是灰色,变为红色
        cell.setAttribute("data-grey", ""); // 空值为假值
        cell.style.backgroundColor = grey;
      }
    }
    #table tr td {
      width: 20px;
      height: 50px;
      cursor: pointer;
      background-color: #E6E6E6;
      border: 1px solid black;
    }
    <table class="table table-bordered" id="table">
      <tbody>
        <tr>
          <td onclick="changeColor(this)"></td>
          <td onclick="changeColor(this)"></td>
          <td onclick="changeColor(this)"></td>
          <td onclick="changeColor(this)"></td>
          <td onclick="changeColor(this)"></td>
        </tr>
      </tbody>
    </table>

    répondre
    0
  • Annulerrépondre