我是否正确使用onchange?

时间:2009-10-19 01:16:59

标签: javascript html-form onchange

我正在尝试将值(key)更新为与文本框中的数字(angle)相对应除以值(25)。但是,由于某种原因,changeMe函数似乎没有执行。我错误地使用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>

5 个答案:

答案 0 :(得分:5)

更改行

document.getElementById(key).value=y;

document.getElementById('key').innerHTML=y;

答案 1 :(得分:1)

要查看是否正在调用它,只需将其添加为第一行:

alert("Hey, I'm being called!");

现在,我已经在这里看到了一个问题:在您的函数的最后一行,您正在执行getElementById(key),但是您应该使用双引号括起key。如果没有,它被视为变量而不是字符串。

答案 2 :(得分:1)

最后一行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>

答案 3 :(得分:1)

changeMe(this.id)困扰我,我只是看到(this),但是,知道发生了什么的最好方法是使用IE8中的Web Developer扩展(我按F12和它出现在Firefox上,或者最好是Firebug,然后你可以在changeMe函数的开头放入一个断点,看看传入了什么,因为可能有错误。

其他两个人已经提到了你的getElementById问题。

答案 4 :(得分:0)

尝试使用James Black的建议来使用onchange="changeMe(this)",您的功能变得简化

function changeMe(x) {
    y = Math.round(x.value/25);
    document.getElementById('key').innerHTML = y;
}

注意document.getElementById('key').innerHTML = y,这将替换内部html(如名称所示),我认为这就是你想要使用的。