在Javascript运行时更新html文本框

时间:2010-10-26 15:13:18

标签: javascript html input field

我有一个接受用户输入的html文件,然后使用Javascript根据这些输入计算一个值。程序结束后,该结果将显示在输入框中。

我想做的是,当你点击按钮运行javascript时,显示结果的输入框将显示'Calculating ...',直到计算完成(计算可以采取~5秒)。但是,如果我提出类似的内容:

document.getElementById('answer').value = 'Calculating...';

在我的Javascript代码的最顶层,它似乎不会在运行时更新输入字段。而是运行该程序,然后在输入字段中最终更新结果。

任何人都知道我在运行程序时如何更新输入字段,然后在程序结束后再次使用结果更新它?

谢谢!

编辑:以下是对我的代码的更好解释

<td colspan=1 align=left><input id="button" value="Calculate" onclick=calculate(this.form.type.value,this.form.d.value,this.form.c.value,this.form.freq.value)>
<input id="answer" readonly="true">
</td>
</tr>

function calculate(type,d,c,f) {
    //Performs some calculation
    document.getElementById('answer').value = TS;
}

4 个答案:

答案 0 :(得分:3)

这是因为重新绘制answer元素的事件要么在你的JavaScript代码段完成之后才会发生(因为浏览器会在队列中安排这些事情)。

您需要做的是让JavaScript在计算开始之前中断队列:

  • 将值更新为“正在计算”(将重新绘制放在队列的末尾)

  • 使用setTimeout()设置计时器0秒(计时器启动计算代码)

  • 当计时器立即触发时,它将调用计算代码在队列末尾元素重新绘制之后。

    <script>
    document.getElementById('answer').value = 'Calculating...';
    setTimeout( your_calculation(), 0);
    </script>
    

这样,您的JavaScript将设置字段值,设置计时器并完成。然后队列的下一步是重新绘制答案元素;然后计时器启动并启动计算逻辑。

答案 1 :(得分:1)

在进行计算之前,您必须使用超时来刷新界面。

document.getElementById('answer').value = 'Calculating...'; 

setTimeout( function() { 

    // TODO put your actual calculation statements/function calls here.

    // document.getElementById('answer').value = answer;

}, 0 );

答案 2 :(得分:0)

在我看来,您正在为页面上可能尚不存在的元素设置值。检查DOM是否已准备就绪。

教程:http://www.javascriptkit.com/dhtmltutors/domready.shtml

答案 3 :(得分:0)

是什么意思在onclick事件上?

<script>
function onReady() {
  document.getElementById('button').click = function() {
    document.getElementById('answer').value = 'Calculating...';
    document.getElementById('answer').value =  doCalculation();
  }
}
</script>
<body unload="onReady()">