我是否正确使用onchange?
问题描述:
我试图让一个值(key
)更新为与文本框中的数字(angle
)除以值(25
)相对应。但是,由于某种原因,changeMe
函数似乎没有执行。我是否错误地使用onchange?我是否正确使用onchange?
<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>
答
更改线路
document.getElementById(key).value=y;
到
document.getElementById('key').innerHTML=y;
答
要看看它是否被调用,只需添加这作为第一行:
alert("Hey, I'm being called!");
现在,我已经在这里看到一个问题:在你的函数的最后一行,你这样做getElementById(key)
,但你应该用双引号括起key
。如果没有,它被认为是一个变量而不是一个字符串。
答
最后一行document.getElementById(key)
应该是document.getElementById("key")
。
通过您可以通过将<input>
元素,而不是直接将其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>
答
的changeMe(this.id)
困扰我,我使用的看到刚刚(this)
,但是,最好的办法要知道发生了什么是使用IE8中的Web Developer扩展(我按F12,它出现),或者最好是Firefox上的Firebug,然后你可以在changeMe函数的开始处插入一个断点并查看传入的内容,因为可能有错误。
而另外两个已经提到你的getElementById问题。
答
尝试使用建议由詹姆斯·布莱克使用onchange="changeMe(this)"
,你的功能就变得较为简单
function changeMe(x) {
y = Math.round(x.value/25);
document.getElementById('key').innerHTML = y;
}
通知的document.getElementById('key').innerHTML = y
,这将替换内部的html(如名称所描述的那样),我认为那是什么你想用。
给一个跨度的“钥匙”的id是要求麻烦。 “KeyResult”或“OutputKey”或“KeyDisplay”将不太可能在Tomas发现的代码中产生错误。 – MusiGenesis 2009-10-19 02:47:45