"Pourquoi style.backgroundColor n'a-t-il aucun effet ?"
P粉969253139
2023-08-24 16:47:18
<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>
Votre code ne fonctionnera pas car lorsque votre code s'exécute pour la première fois,
style
属性没有设置backgroundColor
:style
代表元素的内联样式属性,而你的元素在开始时没有内联样式。当你检查元素的背景是否为red
或gray
时,它既不是红色也不是灰色,因为它没有内联样式(style.backgroundColor
est en fait une chaîne vide).Vous avez plusieurs options :
getComputedStyle
来查看元素的background-color
, qu'il soit défini en ligne ou non.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.
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) :