"Kenapa style.backgroundColor tiada kesan?"
P粉969253139
P粉969253139 2023-08-24 16:47:18
0
2
566
<p>Cuba tukar warna sel dengan mengklik padanya. </p> <p>Sel biasanya berwarna kelabu dan harus bertukar merah apabila diklik buat kali pertama. Apabila saya mengklik pada sel merah ia akan bertukar menjadi kelabu semula. </p> <p><br /></p> <pre class="brush:js;toolbar:false;">function changeColor(sel) { var merah = '#FE2E2E'; var kelabu = '#E6E6E6'; if (cell.style.backgroundColor == kelabu) { cell.style.backgroundColor = merah; } lain { if (cell.style.backgroundColor == merah) { cell.style.backgroundColor = kelabu; } }; };</pre> <pre class="brush:css;toolbar:false;">#table tr td { lebar: 20px; ketinggian: 50px; kursor: penunjuk; warna latar belakang: #E6E6E6; sempadan: 1px hitam pejal; }</pre> <pre class="brush:html;toolbar:false;"><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></pre> <p><br /></p> <p>Saya juga mencuba <code>.style.bgColor</code>, <code>rgb</code> dan <code>if (cell.style.backgroundColor ===</code> , tetapi ini juga tidak berfungsi. Nilai warna latar belakang sel sama ada dihantar dalam <em>.backgroundColor</em>:<strong>''</strong>, atau diluluskan dalam <em>. bgColor< /em>: <strong>undefined</strong>
P粉969253139
P粉969253139

membalas semua(2)
P粉593536104

Kod anda tidak akan berfungsi kerana apabila kod anda mula-mula dijalankan, style属性没有设置backgroundColorstyle代表元素的内联样式属性,而你的元素在开始时没有内联样式。当你检查元素的背景是否为redgray时,它既不是红色也不是灰色,因为它没有内联样式(style.backgroundColorsebenarnya rentetan kosong).

Anda mempunyai beberapa pilihan:

  • Gunakan getComputedStyle来查看元素的background-color tanpa mengira sama ada ia ditetapkan sebaris atau tidak.
  • Menyediakan kes lalai yang akan menetapkan elemen background-color tidak kira sama ada elemen telah ditetapkan. (Jika merah, tukar kepada kelabu; jika tidak, tetapkan kepada merah.)

Mana-mana pendekatan boleh mencapai apa yang anda perlukan, bergantung pada berapa banyak fleksibiliti yang anda perlukan dalam penyelesaian anda, saya akan menyerahkan kepada anda untuk membuat keputusan.

P粉239164234

Nilai yang diperoleh daripada style.backgroundColor mungkin tidak dikembalikan dalam format yang sama seperti yang ditetapkan;

Cara yang berubah secara minimum ialah dengan menyimpan bendera pada elemen (lihat ulasan):

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>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan