在scala.js中删除事件侦听器

时间:2017-03-12 14:52:48

标签: javascript scala 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)
    })
  }

我做错了什么?

1 个答案:

答案 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.Function1js.Function1的隐式转换将启动两次,从而产生在参考不同的功能......