2012-02-09 30 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;" />