2016-11-21 2 views
0

Ich habe ein Textfeld in meiner HTML-Datei und ich möchte erkennen, wann auch immer ein Benutzer den Wert ändert und den aktualisierten Wert auch bestimmen. HTML-Code für Textfeld:Verfolgen von Änderungen in Textfeld in scala js

<input type="text" name="amount" id="amount" value="0" onchange="Demo().change(id,value)"> 

und in meiner scala-Datei, habe ich eine Funktion 'Änderung' implementiert, wie:

@JSExport 
def change(id:String):Unit={ 
appendPar(document.body,"Text Box value is changed and the new value is : "+document.getElementById(id).getAttribute("value")) 
} 

Aber es funktioniert nicht in meinem Fall. Was mache ich hier falsch? Irgendwelche Vorschläge?

UPDATE: Es feuert das Ereignis nur, wenn ich Enter nach dem Ändern des Werts in Textfeld drücken. Außerdem zeigt es den aktualisierten Wert als "0" an. Wie kann ich es aus dem Textfeld holen anstatt meinen vordefinierten Wert?

+1

Ein allgemeiner Kommentar: Dies und ziemlich viele Fragen darüber, wie diese HTML-Entitäten arbeiten, sind nicht wirklich Scala.js Fragen, sie sind HTML/DOM/JavaScript Fragen. Denken Sie daran, dass Scala.js einfach ein Compiler für JavaScript ist - es geht um die * Sprache * und die Funktionalität ist nur eine gewöhnliche Browser-Funktionalität - und im Durchschnitt konzentriert sich die Scala.js-Community nicht auf die DOM-Funktionalität. Ich vermute also, dass Sie wahrscheinlich schnellere Antworten erhalten werden, wenn Sie auch "html5" und/oder "dom" -Tags angeben ... –

+0

Zu der Frage - ich würde nur erwarten, dass es das Ereignis auslöst, nachdem Sie Enter drücken, da [das ist, was die Dokumentation anzeigt] (https://developer.mozilla.org/en-US/docs/Web/Events /Veränderung). Wann möchten Sie dieses Signal bekommen, wenn nicht, wenn Sie Enter drücken? –

+0

Und sind Sie sicher, dass Sie die richtige ID in Ihre Funktion bekommen? Ich gestehe, ich bin ein wenig überrascht, dass der HTML-Code, den du zeigst, tatsächlich funktioniert - ich weiß nicht, wie das eigentlich die richtige ID erfasst ... –

Antwort

0

Sie müssen einen der Onkey-Handler verwenden. Zum Beispiel:

Beachten Sie, dass IIRC, dies löst auch wenn der Benutzer mit den Pfeiltasten bewegt sich. Also, wenn Sie wirklich nur genannt werden wollen, wenn sie sich ändert, müssen Sie eine Variable einführen und prüfen:

var lastValue: String = "" 

@JSExport 
def change(id:String): Unit = { 
    val newValue = document.getElementById(id).getAttribute("value") 
    if (lastValue != newValue) { 
    appendPar(document.body, 
     "Text Box value is changed and the new value is : " + newValue) 
    lastValue = newValue 
    } 
} 
1

Sie input Ereignis statt change verwenden können, wenn Sie IE ignorieren < = 9.

Das DOM Eingangsereignis wird synchron ausgelöst, wenn der Wert eines oder Element

Von MDN geändert wird.

Beachten Sie, dass bei Nicht-Text-/Textarea-Eingängen (z. B. Ankreuzfelder, Optionsfelder usw.) zusätzliche Browserkompatibilitätseinschränkungen bestehen. Sie können jedoch einfach das Ereignis 10 für diese verwenden. Einzelheiten finden Sie unter http://caniuse.com/#search=input.


ich auch nicht sehen, wo die Variable id aus in Ihrem Code kommen. Sie sollten die Zeichenfolge "amount" statt id übergeben, wenn Sie das wünschen, wie folgt: Demo().change("amount"). Das wäre ziemlich unbrauchbar, aber es sollte zumindest funktionieren.

Wenn Sie möchten, dass die Methode generischer ist, beachten Sie, dass JavaScript ein Event-Objekt an alle Event-Handler übergibt und einen target-Schlüssel enthält, der das HTML-Element enthält, auf dem das Ereignis aufgetreten ist (in diesem Fall wäre das Ihre) Textarea). Sie können dann leicht die value dieser target bekommen.

Wenn das verwirrend ist, schlage ich vor, dass Sie zuerst versuchen, dies in JS zu implementieren, und dann übersetzen Sie dies in Scala. Du willst nicht an beiden Fronten gleichzeitig kämpfen.

Verwandte Themen