2013-04-22 7 views
0

Все это немного по моему опыту, но я везде искал все, что мог, и исследовал этот материал в течение 6 часов до сегодняшнего дня и просто бегу в кирпичные стены.Вызов нескольких функций с onchange

У меня есть таблица, в которой пользователь вводит две переменные, и из этих двух переменных выходят 12 разных чисел. Проблема этих чисел выплевывается в виде текстовых строк в текстовые поля только для чтения, и мне нужно, чтобы они отображались как (США). Все поля ввода в таблице используют 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 **. Откуда «сумма» входит в ваши функции? –

+0

Если вы открываете браузеры консоли JavaScript (в большинстве браузеров есть), вы видите какие-либо ошибки? – plalx

+0

Приношу свои извинения. Если вы имеете в виду «сумму», указанную в fuctions «CommaFormatted()» и «CurrencyFormatted()», у меня нет идеи, откуда исходит сумма. Я создал только первую функцию "updatesum()" и часть HTML. Я только захватил эти последние две функции, пытаясь получить результаты от «updatesum()», чтобы возвращать в HTML как валюту, а не строку. – user2116986

ответ

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

+0

Измените 'onChange =" updatesum(); CurrencyFormatted(); CommaFormatted(); "' просто на 'onChange =" updatesum() "'. Вам не нужно вызывать эти функции из 'onChange' - вы используете их в' updatesum' в качестве служебных функций. –

+0

О, ладно! Спасибо. – user2116986

Смежные вопросы