删除 scala.js 中的事件侦听器
Remove event Listener in scala.js
我有一个添加了事件侦听器的按钮列表:
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
到 js.Function1
的隐式转换将启动两次,导致引用不同的函数...
我有一个添加了事件侦听器的按钮列表:
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
到 js.Function1
的隐式转换将启动两次,导致引用不同的函数...