2013-04-22 47 views
0

這一切都有點超出我的經驗,但我已經到處尋找可能,並且迄今爲止研究了這些東西6個小時,並且只是碰到了磚牆。用onchange調用多個函數

我有一個表,用戶輸入兩個變量,並從這兩個變量12個不同的數字吐出來。 這些數字被作爲純文本字符串吐出到只讀文本字段中,我需要將它們顯示爲(US)貨幣。 表中的所有輸入字段都使用onchange來運行執行計算的第一個函數,但是我在網上找到的第二個和第三個函數無法運行。

HTML:

<form name="form" > 

<table width="550" border="0"> 
<tr> 
<td width="265" height="30"><div align="right">Number of Business Customers</div></td> 
</tr> 
<TR> 
<td width="265" height="30"><div align="right">Number of Business Clients:</div></td> 
<td width="142" div align="center"><input style="font-size:12px;text-align:center;" name="sum1" onChange="updatesum();CurrencyFormatted();CommaFormatted90;" /></td> 
<td width="129" div align="center">&nbsp;</td> 
</tr> 
<TR> 
<td height="30"><div align="right">Average Number of Employees:</td> 
<TD div align="center"><input style="font-size:12px;text-align:center;" name="sum2" onChange="updatesum();CurrencyFormatted();CommaFormatted();" /></TD> 
<TD div align="center">&nbsp;</TD> 
<TR> 
<td height="30"><div align="right">Anticipated Employee Tax Reduction:</div></td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none;" name="sum16" readonly "></TD> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum26" readonly><BR /></TD> 
</TR> 
<TR> 
<td height="30"><div align="right">Potential Payroll Tax Reduction (annually):</div></td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum17" readonly ></TD> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum27" readonly ></TD> 
</TR> 
<TR> 
<td height="30"><div align="right">Potential Payroll Tax Reduction (monthly):</td> 
<TD div align="center"><input type="text" style="font-size:12px;text-align:center;border:none" name="sum18" readonly ></td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum28" readonly ></td> 
</TR> 
<TR> 
<td height="30"><div align="right">Pearl Logic Billing (50% of savings, for 12 months):</td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum19" readonly ></td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum29" readonly ></td> 
</TR> 
<TR> 
<td height="30"><div align="right">Sales Agent Monthly Comp (8%):</td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum14" readonly ></td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum24" readonly ></td> 
</TR> 
<TR> 
<td height="30"><div align="right">Sales Agent Total Comp (8%):</td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum15" readonly ></td> 
<TD div align="center"><input style="font-size:12px;text-align:center;border:none" name="sum25" readonly ></td> 
</TR> 
</table> 
</form> 

的Javascript:

function updatesum() { 




document.form.sum14.value = ((((((document.form.sum1.value -0)*(document.form.sum2.value -0)*300))/12)/2)*.08); 
document.form.sum24.value = ((((((document.form.sum1.value -0)*(document.form.sum2.value -0)*400))/12)/2)*.08); 
document.form.sum15.value = (((((((document.form.sum1.value -0)*(document.form.sum2.value -0)*300))/12)/2)*.08)*12); 
document.form.sum25.value = (((((((document.form.sum1.value -0)*(document.form.sum2.value -0)*400))/12)/2)*.08)*12); 
document.form.sum16.value = 300; 
document.form.sum26.value = 400; 
document.form.sum17.value = ((document.form.sum1.value -0)*(document.form.sum2.value -0)*300); 
document.form.sum27.value = ((document.form.sum1.value -0)*(document.form.sum2.value -0)*400); 
document.form.sum18.value = (((document.form.sum1.value -0)*(document.form.sum2.value -0)*300)/12); 
document.form.sum28.value = (((document.form.sum1.value -0)*(document.form.sum2.value -0)*400)/12); 
document.form.sum19.value = ((((document.form.sum1.value -0)*(document.form.sum2.value -0)*300)/12)/2); 
document.form.sum29.value = ((((document.form.sum1.value -0)*(document.form.sum2.value -0)*400)/12)/2); 
} 


//--></script> 

<script type="text/javascript"><!-- 
function CurrencyFormatted() 
{ 
    var i = parseFloat(amount); 
    if(isNaN(i)) { i = 0.00; } 
    var minus = ''; 
    if(i < 0) { minus = '-'; } 
    i = Math.abs(i); 
    i = parseInt((i + .005) * 100); 
    i = i/100; 
    s = new String(i); 
    if(s.indexOf('.') < 0) { s += '.00'; } 
    if(s.indexOf('.') == (s.length - 2)) { s += '0'; } 
    s = minus + s; 
    return s; 
} 
//--></script> 
<script type="text/javascript"><!-- 
function CommaFormatted() 
{ 
    var delimiter = ","; // replace comma if desired 
    var a = amount.split('.',2) 
    var d = a[1]; 
    var i = parseInt(a[0]); 
    if(isNaN(i)) { return ''; } 
    var minus = ''; 
    if(i < 0) { minus = '-'; } 
    i = Math.abs(i); 
    var n = new String(i); 
    var a = []; 
    while(n.length > 3) 
    { 
     var nn = n.substr(n.length-3); 
     a.unshift(nn); 
     n = n.substr(0,n.length-3); 
    } 
    if(n.length > 0) { a.unshift(n); } 
    n = a.join(delimiter); 
    if(d.length < 1) { amount = n; } 
    else { amount = n + '.' + d; } 
    amount = minus + amount; 
    return amount; 
} 

//--></script> 
+4

**的java不是JavaScript **。數量來自你的職能? – 2013-04-22 19:52:00

+0

如果您打開瀏覽器JavaScript控制檯(大多數瀏覽器都有),您是否看到任何錯誤? – plalx 2013-04-22 19:59:37

+0

我的歉意。如果您提到的是「CommaFormatted()」和「CurrencyFormatted()」中提到的「金額」,我不知道金額來自哪裏。 我只創建了第一個函數「updatesum()」和HTML部分。我只抓取了最後兩個函數,試圖從「updatesum()」中得到結果,而不是以字符串的形式返回到HTML中。 – user2116986 2013-04-22 20:03:09

回答

3

你的函數有一個不確定的變量amount。據推測他們只是因爲錯誤而崩潰。

首先,您需要從onChange偵聽器中刪除這些函數調用。

其次,轉變​​職能採取一個未格式化的值,並返回一個格式化的一個

function CurrencyFormatted(amount) { //<-- notice the method parameter 
    var i = parseFloat(amount); 
    if(isNaN(i)) { i = 0.00; } 
    var minus = ''; 
    if(i < 0) { minus = '-'; } 
    i = Math.abs(i); 
    i = parseInt((i + .005) * 100); 
    i = i/100; 
    s = new String(i); 
    if(s.indexOf('.') < 0) { s += '.00'; } 
    if(s.indexOf('.') == (s.length - 2)) { s += '0'; } 
    s = minus + s; 
    return s; 
} 

現在改變每個組調用你updatesum先格式化值

var sum14 = ((((((document.form.sum1.value -0)*(document.form.sum2.value -0)*300))/12)/2)*.08); 
var formattedSum14 = CommaFormatted(CurrencyFormatted(sum14)); 
document.form.sum14.value = sum14; 
+0

好的,我想我明白你的意思是關於未定義的變量。此外,我會更新設置的電話,這是有道理的。但是,我如何從onChange偵聽器中刪除函數? – user2116986 2013-04-22 20:23:28

+0

更改'onChange =「updatesum(); CurrencyFormatted(); CommaFormatted();」'只是'onChange =「updatesum()」'。你不需要從'onChange'調用這些函數 - 你可以在'updatesum'中使用它們作爲工具函數。 – 2013-04-22 20:30:08

+0

哦,好吧!謝謝。 – user2116986 2013-04-22 20:32:24