在 scala-js 应用程序中使用 bootstraptoggle 的 onclick 事件

Using bootstraptoggle's onclick event in a scala-js application

在我的 scala-js 应用程序中,我想使用 bootstraptoggle 库来创建一个漂亮的切换按钮。

到目前为止,我正在通过看起来有点像这样的方法创建切换按钮:

import scalatags.JsDom
import scalatags.JsDom.all._
// ...


def createToggleButton(): JsDom.TypedTag[Input] = {
  def onClick = println("HELLO WORLD!")
  input(id := "myToggle",
        attr("data-toggle") := "toggle",
        `type` := "checkbox",
        onclick := onClick,
        attr("data-on") := "ON",
        attr("data-off") := "OFF",
        attr("data-onstyle") := "success",
        attr("data-width") := "85",
        attr("data-height") := "26")
}

渲染它并将其添加到我的 DOM 时,它看起来像这样:

到目前为止一切正常。然而,奇怪的是: 呈现页面 ('F5') 时,我的控制台 (Chrome - 'F12') 从一开始就显示一个 'HELLO WORLD!' 输出。之后,onclick 事件似乎不再触发

有人知道如何解决这个问题吗?

您应该将 () => action() 形式的 函数 赋予属性 onclick。当前,您正在评估 def onClick 一次,并将该函数调用的结果(即 () 值)存储在 onclick 属性中。相反,你应该写

onclick := { () => onClick }

由于我无法使 bootstrap-切换工作,我决定自己制作。所以,这是我的解决方案:ToggleSwitchWithLabels.scala