簡體   English   中英

我不知道如何解決事件問題?

[英]I don't know how to fix problem with events?

我正在用js構建一個戰艦游戲。 我在網格的目標元素上添加了事件偵聽器,我正在嘗試制作一個帶有一個參數(船長)的函數,根據該參數,函數應該在我的網格上渲染船。 問題是,無論我將什么參數傳遞給函數,它都會使船的長度相同。 我認為問題是事件偵聽器在我第一次單擊元素時保持不變。

這是代碼:

function placeBoat (boatLength){
    domElements.yourGrid.onclick = function(event){
        let target = event.target;
        console.log(event)
        let clickedPosition = target.id
        let clickedPositionId = clickedPosition.slice(4, 6)
        let clikedPositionInt = parseInt(clickedPositionId);
        for(let i = 0; i < boatLength; i++){
            target.style.background = "green";
            target = document.querySelector("#cell" + clikedPositionInt)
            clikedPositionInt += 10;
        }
    }
}

domElements.boat1Button.addEventListener("click", placeBoat(3))
domElements.boat2Button.addEventListener("click", placeBoat(4))
domElements.boat3Button.addEventListener("click", placeBoat(5))

addEventListener 的第二個參數是監聽器函數( https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener )。 但是,您調用的是函數placeBoat而不是將函數作為參數傳遞。

讓我們從一個簡單的解釋開始。 定義一些不帶參數的新函數並使用它們添加事件偵聽器:

function placeBoat3() {
    placeBoat(3);
}
function placeBoat4() {
    placeBoat(4);
}
function placeBoat5() {
    placeBoat(5);
}

domElements.boat1Button.addEventListener("click", placeBoat3)
domElements.boat2Button.addEventListener("click", placeBoat4)
domElements.boat3Button.addEventListener("click", placeBoat5)

如您所見,現在 addEventListener 的第二個參數是不帶括號的函數名。 一旦您對這個想法感到滿意,您就可以繼續前進並使用箭頭功能。 擺脫新函數並調用 addEventListeners,如下所示:

domElements.boat1Button.addEventListener("click", () => placeBoat(3))
domElements.boat2Button.addEventListener("click", () => placeBoat(4))
domElements.boat3Button.addEventListener("click", () => placeBoat(5))

() => placeBoat(3)是定義一個沒有參數的函數的簡寫,它在其主體中調用placeBoat(3) 您可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions了解有關它們的更多信息

暫無
暫無

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

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