2012-02-09 59 views
1

我想通過使用javascript從隱藏的輸入框中提取值,但有時會出現「未定義」錯誤,有時沒有輸出。 當我從一個爲printit()函數中做無法從javascript中訪問隱藏的輸入框值

alert(document.getElementById('hhh').value); 

我得到的輸出。但我認爲,在某種程度上它是不會在以「風險價值」,也

var a =22; 

作品如果我刪除

var a =document.getElementById('hhh').value; 

在下面的代碼。

<script type="text/javascript"> 
var a =document.getElementById('hhh').value; 
function startTime() 
{ 

document.getElementById('txt').innerHTML=a; 
a=a-1; 
t=setTimeout('startTime()',600); 
} 
</script> 

<body onLoad="startTime()"> 
<form name="form1" id="form11" method="post" action=""> 
<input type="hidden" id="hhh" name="time" value="11" /> 
</form> 
<div id="txt"></div> 
</body> 

任何幫助,將不勝感激。 謝謝。

+1

不通過字符串'setTimeout',傳遞函數來代替。並且不要使用'setTimeout'來代替你想要發生的事情,而是使用'setInterval'。 'setInterval(startTime,600);' – Quentin 2012-02-09 15:30:44

回答

3

var a =document.getElementById('hhh').value;

此文檔被加載,從而底層元件可能不會在DOM存在之前運行。

您在hhh存在之前致電document.getElementById('hhh')。將它移動到您調用onload的函數中。

var a; 
function setup() { 
    a = document.getElementById('hhh').value; 
    startTime(); 
} 
function startTime() { 
    document.getElementById('txt').innerHTML = a--; 
    setInterval(startTime, 600); 
} 

並在您的onload中運行setup();

+0

所以我怎樣才能使它可訪問,而不包括它在startTime(),因爲它贏那麼就不會減少 – Nikhar 2012-02-09 15:39:39

4

hhh存在之前您致電document.getElementById('hhh')。將它移動到您調用onload的函數中。

+0

如果我移動那裏,我的var a不會減少。 – Nikhar 2012-02-09 15:33:14

+0

在onload調用一個新的函數,你的設置 - 讀'a'等,然後讓它調用'setInterval(startTime,600);' – 2012-02-09 15:38:37

2

離開它作爲一個「類型=輸入」並添加CSS屬性:display: none;

<input type="input" id="hhh" name="time" value="11" style="display: none;" />