【问题标题】:Remove event Listener in scala.js在 scala.js 中删除事件监听器
【发布时间】:2017-03-12 23:22:52
【问题描述】:

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

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)
    })
  }

我做错了什么?

【问题讨论】:

    标签: javascript scala scala.js


    【解决方案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 的隐式转换将启动两次,从而导致对不同函数的引用。 ..

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多