Verwende ich Onchange falsch?
-
22-09-2019 - |
Frage
Ich versuche einen Wert zu haben (key
) diese Aktualisierungen, die einer Nummer in einem Textfeld entsprechen ((angle
) geteilt durch einen Wert (25
). Aus irgendeinem Grund die jedoch die changeMe
Die Funktion scheint nicht auszuführen. Verwende ich Onchange falsch?
<script type="text/javascript">
function changeMe(x)
{
var y=document.getElementById(x).value;
y = (y/25);
y = (Math.round(y));
document.getElementById(key).value=y;
}
</script>
<form method="POST" action="">
Your Angle: <input type="text" name="angle" id="angle"
onchange="changeMe(this.id)" value="0"/>
Key: <span id="key">0</span><br />
</form>
Lösung
Ändern Sie die Linie
document.getElementById(key).value=y;
zu
document.getElementById('key').innerHTML=y;
Andere Tipps
Um zu sehen, ob es aufgerufen wird, fügen Sie dies einfach als erste Zeile hinzu:
alert("Hey, I'm being called!");
Jetzt sehe ich hier schon ein Problem: In der letzten Zeile Ihrer Funktion tun Sie es getElementById(key)
, aber du solltest einschließen key
mit doppelten Zitaten. Wenn nicht, wird es als Variable anstelle einer Zeichenfolge angesehen.
Das changeMe(this.id)
stört mich, ich benutze es, nur zu sehen (this)
, Aber der beste Weg, um zu wissen, was los ist Der Beginn der Changeme -Funktion und sehen, was übergeben wird, da es einen Fehler geben kann.
Und die anderen beiden erwähnten bereits das Problem mit Ihrem GetelementById.
Die letzte Zeile document.getElementById(key)
sollte sein document.getElementById("key")
.
Übrigens können Sie dies ein gutes Stück vereinfachen, indem Sie das übergeben <input>
Element direkt anstelle seiner ID:
<script type="text/javascript">
function changeMe(angle)
{
var key = document.getElementById("key");
key.innerHTML = Math.round(angle.value / 25);
}
</script>
<form method="POST" action="">
Your Angle: <input type="text" name="angle" id="angle"
onchange="changeMe(this)" value="0"/>
Key: <span id="key">0</span><br />
</form>
Versuchen Sie, den Vorschlag von James Black zu verwenden, um sie zu verwenden onchange="changeMe(this)"
, Ihre Funktion wird vereinfacht
function changeMe(x) {
y = Math.round(x.value/25);
document.getElementById('key').innerHTML = y;
}
Beachten Sie die document.getElementById('key').innerHTML = y
, Dies ersetzt das innere HTML (wie der Name beschreibt), ich denke, das ist es, was Sie verwenden wollten.