gpt4 book ai didi

javascript - 在 scala.js 中删除事件监听器

转载 作者:行者123 更新时间:2023-11-29 23:51:13 25 4
gpt4 key购买 nike

我有一个添加了事件监听器的按钮列表:

import org.scalajs.dom.MouseEvent
import org.scalajs.dom.html.Button
import org.scalajs.jquery.{jQuery}
import org.scalajs.dom

def addOnClickToCells(emptyCellButtons: List[Button]) = {
emptyCellButtons.foreach(emptyCell => {
emptyCell.addEventListener("click",testButtonOnClick(),false)
})
}

def testButtonOnClick() = {
(e:MouseEvent) => dom.window.alert("Hello")
}

我们想要实现的只是从按钮列表中删除事件监听器。这是我尝试过但没有奏效的方法:

emptyCell.removeEventListener("click",testButtonOnClick(),false)

我还尝试了下面的代码,并希望事件监听器在添加后立即被删除,但这并没有发生(事件监听器没有被删除)。

def addOnClickToCells(emptyCellButtons: List[Button]) = {
emptyCellButtons.foreach(emptyCell => {
emptyCell.addEventListener("click",testButtonOnClick(),false)
emptyCell.removeEventListener("click",testButtonOnClick(),false)
})
}

我做错了什么?

最佳答案

每次调用 testButtonOnClick() 时,您都会获得对新函数的引用。请尝试以下操作:

import scala.scalajs.js

val f: js.Function1[MouseEvent, Unit] = testButtonOnClick()
emptyCell.addEventListener("click", f, false)

// Later on
emptyCell.removeEventListener("click", f, false)

编辑:您可能必须将函数明确键入为 js.Function1,否则从 scala.Function1 的隐式转换code>js.Function1 将启动两次,导致引用不同的函数...

关于javascript - 在 scala.js 中删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com