我是否正确使用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> 
+0

给一个跨度的“钥匙”的id是要求麻烦。 “KeyResult”或“OutputKey”或“KeyDisplay”将不太可能在Tomas发现的代码中产生错误。 – MusiGenesis 2009-10-19 02:47:45

更改线路

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(如名称所描述的那样),我认为那是什么你想用。