我正在使用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
。
此时我感到有些困惑。
感谢, 彼得
答案 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