2012-08-31 102 views
0

我很努力使这个工作。 dispatch()函数似乎正在触发(通过警报测试),但innerHTML行似乎不起作用。函数中的innerHTML(全局变量?)

此外,i似乎并没有增加,尽管在onSubmiti++

这里是有问题的功能:

function dispatch(passengers,i,timesArray) 
{ 
    alert('value of i is '+i); 
    timesArray[i]=getTime(); 

    var avTime=getAverageTime(timesArrary); 

    var throughput=passengers*3600000/avTime; 

    if(i==0) 
    { 
     document.getElementById('output').innerHTML = 'Calculating...'; 
    } 
    else 
    { 
     document.getElementById('output').innerHTML = throughput; 
    } 
    //and possibly a list (w/e) 
} 

这里是形式:

<form method="post" action="javascript:void(0);" name="applesForm" onSubmit="dispatch(document.applesForm.numPassengers.value, num, times);i++;"> 
    <input type="text" name="numApples" id="numPassengers" /> 
    <br/> 
    <input type="submit" name="Submit" value="Press on Dispatch!"/> 
</form> 

难道这是不能够从函数内部改变全局变量的问题?

或者,avTimethroughput线路正在使功能停止吗?

谢谢。

+1

您的代码中包含一个错字timesSort,这将导致该函数的执行停止。错字是否出现在代码的实际副本中? –

+0

你可以尝试通过你的函数走过'alert',看看它失败的地方。 –

+0

谢谢,错字消失了。这个函数似乎在'timesArray [i] = getTime();'失败,',这行会不会成功改变times [num]'? – Jess

回答

2

在这一行:

<form method="post" action="javascript:void(0);" name="applesForm" onSubmit="dispatch(document.applesForm.numPassengers.value, num, times);i++;"> 

i是一个全局变量,但在dispatch()i是这不是在全局范围的参数。在dispatch()内部,它处于该函数的局部范围内,不能在全局范围内增加。因此,我认为你的onSubmit()应该是:

onSubmit="dispatch(document.applesForm.numPassengers.value, num, times);num++;"> 
+0

谢谢,_i_应该只存在于函数内部。但它仍然失败。 – Jess

+0

尝试从'dispatch()'返回false,以防止实际提交表单。 – Teemu

+0

虽然这不是最终的问题,但增加了“返回false”。 – Jess

0

为什么变量在函数外增加?它不应该在功能内部增加吗?

另外,如果num是全局的,则不需要将它作为参数传递。

// global 
var num = 0; 

function dispatch(passengers, timesArray) 
{ 
    alert('value of num is ' + num); 
    timesArray[num]=getTime(); 

    var avTime = getAverageTime(timesArrary); 

    var throughput = passengers * 3600000/avTime; 

    if(num == 0) 
    { 
     document.getElementById('output').innerHTML = 'Calculating...'; 
    } 
    else 
    { 
     document.getElementById('output').innerHTML = throughput; 
    } 
    //and possibly a list (w/e) 

    // increasing num here! 
    num++; 
} 

然后您的表单可以放弃变量的增加和来自调用的num。

<form method="post" action="javascript:void(0);" name="applesForm" onSubmit="dispatch(document.applesForm.numPassengers.value, times)"> 

Cheers,Apoc。