I spent half the afternoon at Borders going through every JS book trying to
figure this out, no luck.  Anyone have some clues for me?

I have a simple form that is meant to resemble a simple spreadsheet for the
sales guys to use to do some pricing models with.  I start with a couple of
known numbers from a database for the account they are working on, and then
let them do their modeling based on those numbers, using formulas that I
build using JS.

Those fixed numbers should not be changed (obviously).  However, I want all
the numbers to format the same, so I set them all up as <INPUT type="text">
and used different style sheets depending on whether the field was truly an
input field, or a calculated field, or one of the fixed input numbers.  So
on the fields that are not really meant for user input, I set READONLY in
the <INPUT> tag.

When I need to recalculate (triggered via onChange in the user input <INPUT>
tags), I do a
        document.formname.fieldname.readonly = 0
in JS, and then set it back to 1 when I'm done.

Sound OK so far?  Well, I thought so to.  My development PC runs IE 5, and
all is just great with this little app.  I put it up on the production
server for people to beat on and test, and guess what?  The official
deployed version of IE in the company happens to be IE 4, and whenever
and those fields with the starting numbers do not get populated.  As soon as
a number is typed into any of the user input fields, I get a NaN error
message (not a number) in any of the other fields whose calculated value
depends upon the starting numbers.

I tried leaving off the initial READONLY in the <INPUT> tags, figuring there
was interaction between the initial value, and the JS code.  Didn't change a
thing, but now if I happen to type a number into the field that should have
the initial value, the NaN goes away and the calculation uses the value I
typed in.

I should not be able to type into that field!  The last thing that the JS
functions do, both when they do the recalcs, or when the startup routine is
called via onLoad in <BODY> (to set the initial values), is to set the
.readonly back to 1.  But they are certainly not readonly now!

I looked all through the charts in the various books about what is supported
in each JS version and browser version, and found no mention at all of
READONLY.  Many of the HTML books don't mention it at all.  None of the JS
reference books I looked through included it as an option for the
document.form.field object. But then most of them didn't spend much time on
forms at all.

ANY IDEAS?  I'M STUMPED, AND I WANTED TO GET THIS PUPPY OFF MY PLATE THIS
WEEK AND MOVE ON TO OTHER EXCITING THINGS. CODE IS BELOW...

tia,
-reed

<cfset RevActual = 9999>
<cfset COSActual = 6666>
<cfset ATLActual = 5555>
<cfset OEMActual=1000>


<script language="JavaScript">
function SetValues(){
document.data.RevActual.readonly = 0;
document.data.COSActual.readonly = 0;
document.data.COSATLActual.readonly = 0;
document.data.COSOEMActual.readonly = 0;

document.data.RevActual.value = parseInt(RevActual);
document.data.COSActual.value = parseInt(COSActual);
document.data.COSATLActual.value = parseInt(ATLActual);
document.data.COSOEMActual.value = parseInt(OEMActual);

document.data.RevActual.readonly = 1;
document.data.COSActual.readonly = 1;
document.data.COSATLActual.readonly = 1;
document.data.COSOEMActual.readonly = 1;

ReCalcAll();
}
function ReCalcAll(){
document.data.RevCoActual.readonly = 0;
document.data.RevRunRateActual.readonly = 0;
document.data.GMActual.readonly = 0;
document.data.GMPctActual.readonly = 0;
document.data.COSActual.readonly = 0;
document.data.COSATLActual.readonly = 0;
document.data.COSOEMActual.readonly = 0;

document.data.RevCoForecast.value =
parseInt(document.data.RevCoOneTimeForecast.value) +
parseInt(document.data.RevCoOngoingForecast.value);
document.data.RevCoActual.value =
parseInt(document.data.RevCoOneTimeActual.value) +
parseInt(document.data.RevCoOngoingActual.value);

document.data.RevRunRateActual.value =
parseInt(document.data.RevActual.value) -
parseInt(document.data.RevCoActual.value);

document.data.COSATLForecast.value =
parseInt(document.data.COSATLRunRateForecast.value) +
parseInt(document.data.COSATLCoForecast.value);
document.data.COSOEMForecast.value =
parseInt(document.data.COSOEMRunRateForecast.value) +
parseInt(document.data.COSOEMCoForecast.value);


document.data.COSForecast.value =
parseInt(document.data.COSATLForecast.value) +
parseInt(document.data.COSOEMForecast.value);
document.data.RevForecast.value =
parseInt(document.data.RevRunRateForecast.value) +
parseInt(document.data.RevCoForecast.value);

document.data.GMForecast.value = parseInt(document.data.RevForecast.value) -
parseInt(document.data.COSForecast.value);
document.data.GMPctForecast.value =
Math.round((parseInt(document.data.GMForecast.value) * 100 ) /
(parseInt(document.data.RevForecast.value)+1));

document.data.GMActual.value = parseInt(document.data.RevActual.value) -
parseInt(document.data.COSActual.value);
document.data.GMPctActual.value =
Math.round((parseInt(document.data.GMActual.value) * 100 ) /
(parseInt(document.data.RevActual.value)+1));

document.data.RevCoActual.readonly = 1;
document.data.RevRunRateActual.readonly = 1;
document.data.GMActual.readonly = 1;
document.data.GMPctActual.readonly = 1;
document.data.COSActual.readonly = 1;
document.data.COSATLActual.readonly = 1;
document.data.COSOEMActual.readonly = 1;
}
function ReCalcCOSOEMRunRate(){

document.data.COSOEMCoActual.value =
parseInt(document.data.COSOEMActual.value) -
parseInt(document.data.COSOEMRunRateActual.value);
}
function ReCalcCOSOEMCo(){
document.data.COSOEMRunRateActual.value =
parseInt(document.data.COSOEMActual.value) -
parseInt(document.data.COSOEMCoActual.value);
}
function ReCalcCOSATLRunRate(){
document.data.COSATLCoActual.value =
parseInt(document.data.COSATLActual.value) -
parseInt(document.data.COSATLRunRateActual.value);
}
function ReCalcCOSATLCo(){
document.data.COSATLRunRateActual.value =
parseInt(document.data.COSATLActual.value) -
parseInt(document.data.COSATLCoActual.value);
}

</script>

<form action="FinanceEntry2001Update.cfm" method="POST"  name="data">
<table border="1" cellspacing="0" cellpadding="1" bordercolor="White"
bordercolorlight="White" bordercolordark="Black" style="font-family:
Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: xx-small;">
<tr >
<td width="100px">
<td width="20px"><b>FORECAST</b></td>
<td width="20px"><b>ACTUAL</b></td>
<td width="100px"><b>EXPLANATORY NOTES</b></td>
</tr>

<tr>
<td><b>REVENUE</b></td>
<td align="right"><INPUT type="text" class="fieldCalc"  READONLY
name="RevForecast" value="0"    size="9" maxlength="9"></td>
<td align="right"><INPUT type="text" class="fieldStatic"   name="RevActual"
size="9" maxlength="9"></td>
<td>&nbsp;</td>
</tr>

<tr>
<td>Installed-base RunRate</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="RevRunRateForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldCalc"  READONLY
name="RevRunRateActual" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="RevRunRateNotes" value=""   size="30" maxlength="250"></td>
</tr>

<tr>
<td>Change Orders</td>
<td align="right"><input type="text" class="fieldCalc"  READONLY
name="RevCoForecast" value="0"></td>
<td align="right"><input type="text" class="fieldCalc"    READONLY
name="RevCoActual" value="0"></td>
<td>&nbsp;</td>
</tr>

<tr>
<td align="right">One-Time</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="RevCoOneTimeForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="RevCoOneTimeActual" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="RevCoOneTimeNotes" value=""    size="30" maxlength="250"></td>
</tr>

<tr>
<td align="right">On-Going Billing</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="RevCoOngoingForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="RevCoOngoingActual" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="RevCoOngoingNotes" value=""    size="30" maxlength="250"></td>
</tr>

<tr>
<td><b>COS</b></td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="COSForecast" value="0"    size="9" maxlength="9"></td>
<td align="right"><INPUT type="text" class="fieldStatic"    name="COSActual"
size="9" maxlength="9"></td>

<td>&nbsp;</td>
</tr>

<tr>
<td>Atlanta Delivery</td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="COSATLForecast" value="0"    size="9" maxlength="9"></td>
<td align="right"><INPUT type="text" class="fieldStatic"
name="COSATLActual"    size="9" maxlength="9"></td>
<td>&nbsp;</td>
</tr>

<tr>
<td align="right">Installed-Base/RunRate</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSATLRunRateForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSATLRunRateActual" value="0"    size="9" maxlength="9"
onChange="ReCalcCOSATLRunRate();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="COSATLRunRateNotes" value=""    size="30" maxlength="250"></td>

</tr>

<tr>
<td align="right">Change Orders</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSATLCoForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSATLCoActual" value="0"    size="9" maxlength="9"
onChange="ReCalcCOSATLCo();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="COSATLCoNotes" value=""    size="30" maxlength="250"></td>

</tr>
</tr>

<tr>
<td>OEM Delivery</td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="COSOEMForecast" value="0"    size="9" maxlength="9"></td>
<td align="right"><INPUT type="text" class="fieldStatic"
name="COSOEMActual"    size="9" maxlength="9"></td>
<td>&nbsp;</td>
</tr>

<tr>
<td align="right">Installed-Base/RunRate</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSOEMRunRateForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSOEMRunRateActual" value="0"    size="9" maxlength="9"
onChange="ReCalcCOSOEMRunRate();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="COSOEMRunRateNotes" value=""    size="30" maxlength="250"></td>

</tr>
</tr>

<tr>
<td align="right">Change Orders</td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSOEMCoForecast" value="0"    size="9" maxlength="9"
onChange="ReCalcAll();"></td>
<td align="right"><INPUT type="text" class="fieldDetail"
name="COSOEMCoActual" value="0"    size="9" maxlength="9"
onChange="ReCalcCOSOEMCo();"></td>
<td align="right"><INPUT type="text" class="fieldDetailNotes"
name="COSOEMCoNotes" value=""    size="30" maxlength="250"></td>

</tr>
</tr>

<tr>
<td><b>GM $</b></td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="GMForecast" value="4444"    size="9" maxlength="9"></td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="GMActual" value="4888"    size="9" maxlength="9"></td>
<td>&nbsp;</td>
</tr>

<tr>
<td><b>GM %</b></td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="GMPctForecast" value="44"    size="9" maxlength="9"></td>
<td align="right"><INPUT type="text" class="fieldCalc"    READONLY
name="GMPctActual" value="48"    size="9" maxlength="9"></td>
<td>&nbsp;</td>
</tr>

</table>

------------------------------------------------------------------------------------------------
Archives: http://www.mail-archive.com/[email protected]/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists or send a message 
with 'unsubscribe' in the body to [EMAIL PROTECTED]

Reply via email to