2009-10-19 106 views
0

我試圖讓一個值(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

回答

5

更改線路

document.getElementById(key).value=y; 

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

要看看它是否被調用,只需添加這作爲第一行:

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

現在,我已經在這裏看到一個問題:在你的函數的最後一行,你這樣做getElementById(key),但你應該用雙引號括起key。如果沒有,它被認爲是一個變量而不是一個字符串。

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> 
1

changeMe(this.id)困擾我,我使用的看到剛剛(this),但是,最好的辦法要知道發生了什麼是使用IE8中的Web Developer擴展(我按F12,它出現),或者最好是Firefox上的Firebug,然後你可以在changeMe函數的開始處插入一個斷點並查看傳入的內容,因爲可能有錯誤。

而另外兩個已經提到你的getElementById問題。

0

嘗試使用建議由詹姆斯·布萊克使用onchange="changeMe(this)",你的功能就變得較爲簡單

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

通知的document.getElementById('key').innerHTML = y,這將替換內部的html(如名稱所描述的那樣),我認爲那是什麼你想用。