ScalaJs 0.9:在没有jQuery的情况下获取HTML输入值

时间:2016-07-21 14:18:53

标签: html scala scala.js

我正在使用ScalaJS,我想读取HTML input元素的值。

这是HTML代码:

<input id="nodeValue" type="number" step="1" />

这是Scala代码:

object TutorialApp extends JSApp {
    // ...
    def addNode() = {
        val nodeValue = document.getElementById("nodeValue").value.toInt
    }
}

它不能编译,如

[error] TutorialApp.scala:42: value value is not a member of org.scalajs.dom.raw.Element
[error]     val nodeValue = document.getElementById("nodeValue").value.toInt

在文档中,我找不到value的{​​{1}}属性。

在官方basic tutorial中,它立即用于jQuery,但我会避免它,因为我正在研究一个小概念证明。我确信有一种方法可以只使用DOM API。

编辑:

通过文档,我找到了返回字符串的org.scalajs.dom.raw.Element方法。它说尽管对于“大多数节点类型”来说都是nodeValue。 我是null并且确实在运行时失败,返回null。 另一个编辑:它还为文本输入返回number

此时我感到有些困惑。

感谢, 彼得

1 个答案:

答案 0 :(得分:4)

我认为您提取的元素(nodeValue)是<input>元素。

getElementById不知道nodeValue是什么类型的元素。它无法访问.html来识别它,因此它返回一个非常通用的Element。但事实上,知道它是输入元素,即org.scalajs.dom.html.Input。您可以使用.asInstanceOf[html.Input]告诉编译器。通用Element没有value属性,只有Input有。

import org.scalajs.dom.html

val nodeValue = document.getElementById("nodeValue").asInstanceOf[html.Input].value.toInt