我有一个按钮列表,其中添加了一个事件监听器:
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)
})
}
我做错了什么?
答案 0 :(得分:1)
每当您致电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
的隐式转换将启动两次,从而产生在参考不同的功能......