2016-07-21 12 views
0

Ich benutze ScalaJS und möchte den Wert eines HTML input Elements lesen.ScalaJs 0.9: HTML Eingabewert ohne jQuery

Hier ist der HTML-Code:

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

Und das ist der Code Scala:

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

Es lässt sich nicht kompilieren, wie

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

In der Dokumentation, kann ich finde das value Attribut von org.scalajs.dom.raw.Element nicht.

In der offiziellen basic tutorial verwendet es sofort zu jQuery, aber ich würde es vermeiden, da ich an einem kleinen Proof of Concept arbeite. Ich bin sicher, dass es eine Möglichkeit gibt, nur die DOM-API zu verwenden.

EDIT:

durch die Dokumentation gehen fand ich die nodeValue Methode, die einen String zurückgibt. Es sagt aber, dass das null für "die meisten Knotentypen" ist. Mine ist number und in der Tat fehlschlägt zur Laufzeit und gibt null zurück. Eine andere Bearbeitung: Es gibt null auch für eine Texteingabe zurück.

Ich fühle mich an dieser Stelle etwas verwirrt.

Dank, Pietro

Antwort

4

ich das Element nehme an, Sie holen (nodeValue) ist ein <input> Element.

getElementById weiß nicht, welche Art von Element nodeValue ist. Es hat keinen Zugriff auf die .html, um das herauszufinden, und daher gibt es einen sehr generischen Element zurück. Aber in der Tat, Sie wissen, dass es ein Eingang Element ist, d.h. ein org.scalajs.dom.html.Input. Das können Sie dem Compiler mit .asInstanceOf[html.Input] sagen. Eine generische Element hat keine value Eigenschaft, nur Input s haben.

import org.scalajs.dom.html 

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

Wäre es besser, den HTML-Code direkt in scalajs zu generieren? Wie bei Scalatags? – gurghet

+0

danke, funktioniert! – pietro909

Verwandte Themen