搜尋

首頁  >  問答  >  主體

如何在我的點擊功能中只允許選擇一個元素? (純JS)

我正在創建一個測驗應用程序,它從API 中提取數據,構建一系列問題,然後每次在測驗頁面上加載不同數量的“答案元素”,具體取決於從數組中隨機選擇的問題.

以下是建立一系列可點擊的「玩家卡」的功能,這些卡片是 CSS 卡樣式的有效答案。這個想法是用戶選擇一張卡,然後點擊檢查按鈕來運行該功能以檢查是否正確。

除了一件事之外,該功能運作良好。用戶可以選擇所有卡片。

我遇到的問題是,您可以單擊所有答案,它們都會獲得 CSS 類,並且資料會傳遞給所有選定的卡片/答案。

我只想讓使用者選擇一個答案。他們可以點擊任何卡片,然後改變主意,但他們只能選擇一個答案,然後依次處理答案檢查功能。

我不知道該怎麼做?誰能幫助我理解我需要如何更改此程式碼才能實現這一點?

function addClickEvent(answers) {
  const playerCard = document.querySelectorAll(".player-card");
  for (i = 0; i < playerCard.length; i++) {
    playerCard[i].setAttribute("id", [i]);
    playerCard[i].addEventListener("click", (e) => {
      clickedPlayer = e.target;
      clickedPlayer.classList.add("border-lime-500");
      clickedPlayer.classList.add("border-8");
      let userAnswer = answers[clickedPlayer.id];
      
      checkButton.addEventListener("click", () => {
        checkAnswer(userAnswer, answers);
      });
    });
  }
}

P粉345302753P粉345302753304 天前435

全部回覆(1)我來回復

  • P粉270891688

    P粉2708916882024-01-30 00:32:27

    將答案儲存在比偵聽器範圍更大的變數中。每當提交任何答案時,變數都會被覆蓋。然後宣告一個單獨的 checkButton 監聽器。如果變數保存的答案不為空,請檢查答案。

    function addClickEvent(answers) {
      const playerCard = document.querySelectorAll(".player-card");
      let userAnswer = null;
      
      for (i = 0; i < playerCard.length; i++) {
        playerCard[i].setAttribute("id", [i]);
        playerCard[i].addEventListener("click", (e) => {
          clickedPlayer = e.target;
          clickedPlayer.classList.add("border-lime-500");
          clickedPlayer.classList.add("border-8");
          userAnswer = answers[clickedPlayer.id];
        });
      }
      
      checkButton.addEventListener("click", () => {
            if(!userAnswer) return alert("Select an answer first!");
            checkAnswer(userAnswer, answers);
       });
    }
    

    上面的程式碼不會讓前端在點擊其他卡片時「取消選擇」這些卡片(如果您也想要的話),但這是一個簡單的修復。

    回覆
    0
  • 取消回覆