簡體   English   中英

事件監聽器class的變化只是暫時的,classList.replace只是一次點擊,如何讓它永久化

[英]Change of class on an event listener is only temporary, classList.replace is only for one click, how to make it permanent

[.[enter image description here][1]][1]我想創建一個簡單的繪圖應用程序,通過單擊它們為正方形的背景着色。 我在每個 li 上添加了一個點擊事件,它通過添加 class 來更改背景顏色,但是。 我想通過添加 4 個按鈕來將其提升到一個新的水平,這些按鈕會更改高光燈的 colors? 任何人都可以幫我嗎?

所以我的問題是:如何單擊一個按鈕(標題中的 li),它將 select 顯示為 ul class=grid li 上我的原始事件偵聽器的顏色?

 <header>
      <ul class="header">
        <li class="black">Black</li>
        <li class="red">Red</li>
        <li class="blue">Blue</li>
        <li class="orange">Orange</li>
      </ul>
    </header>
    <ul class="grid">
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      .......
     
const myElements = document.getElementsByTagName("li");
for (let i = 0; i < myElements.length; i++) {
  myElements[i].addEventListener("click", function () {
    let selected = myElements[i];
    selected.classList.toggle("highlight");
  });
}

我試過了(刪除並添加新的 class,替換 class,切換)

black.addEventListener("click", function () {
  selected.classList.replace("highlight", "black");
});

但背景顏色的改變只是一次性的。 我想將新的 class 永久化。 1]: https://i.stack.imgur.com/Fgg87.png

通過向您的ul.header liul.grid li添加事件偵聽器,您將實現此目的。 ul.header li click 事件偵聽器將保存您想要的顏色, ul.grid li click 將使用保存的顏色來應用它。

 var selcolor = ''; const colorbtns = document.querySelectorAll('ul.header > li'); const griditems = document.querySelectorAll('ul.grid > li'); colorbtns.forEach(function(el) { el.addEventListener("click", function(e) { selcolor = e.target.className; console.log(selcolor); }); }); griditems.forEach(function(el) { el.addEventListener("click", function(e) { if(el.classList.length <= 0) { el.classList.add(selcolor); } else { el.className = ""; } }); });
 .header li { display:inline-block; color:#fff; padding:5px; }.grid li { width:50px; height:50px; display:inline-block; border:1px solid black; }.black { background-color:black; }.red { background-color:red; }.blue { background-color:blue; }.orange { background-color:orange; }
 <header> <ul class="header"> <li class="black">Black</li> <li class="red">Red</li> <li class="blue">Blue</li> <li class="orange">Orange</li> </ul> </header> <ul class="grid"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>

編輯

更新了代碼

el.addEventListener("click", function(e) {
    el.classList.add(selcolor);
});

el.addEventListener("click", function(e) {
    if(el.classList.length <= 0) {
        el.classList.add(selcolor);
    }
    // this else statement will clear the color on second click if theres already one color assigned
    else {
       el.className = "";
    }
  });

這樣你只能根據你的評論分配一次顏色

但背景顏色的改變只是一次性的

在這種情況下,您最好使用 JavaScript 中的查詢選擇器。

const myElements = document.querySelectorAll("div.grid > li");

您可以在這里閱讀更多相關信息: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorhttps://developer.mozilla.org/en-US/docs/Web/ API/文檔/querySelectorAll

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM