2013-06-03 48 views
0

我試圖讓幾次計算運行。其中一人將每年的租金除以平方英尺。除非您添加逗號或美元符號,否則此方法可行。如果田地裏沒有東西填滿,我還希望租金/平方英尺的地方根本不顯示任何東西。第二個領域通過將總平方英尺除以平方英尺來給出百分比(%NRA)。如果該領域中沒有任何東西,我還想保持空白。任何幫助將不勝感激!計算 - Javascript - 平方英尺除以平方英尺除以平方英尺除以平方英尺

<html> 

<head> 
<title></title> 

<body> 

<form method="POST" action> 


<table border="0" width="640"> 

    <tr> 
    <td width="169"><font face="Arial" size="2">Total Square Feet:</font></td> 
    <td width="136"><font size="2" face="Arial"> 
    <input type="text" name="SF" id="TotalSF" OnChange="calcNRA1();" size="18" tabindex="530"></font></td> 
    </tr> 
    </table> 
&nbsp; 
&nbsp; 
<table border="1" height="167"> 
    <tr> 
    <td width="82" align="center" height="16"><font face="Arial" size="2">Sq. 
     Ft.</font></td> 
    <td width="61" align="center" height="16"><font face="Arial" size="2">% 
     NRA:</font></td> 
    <td align="center" height="16" style="width: 106px"><font face="Arial" size="2">Annual 
     Rent</font></td> 
    <td align="center" height="16" style="width: 129px"><font face="Arial" size="2">&nbsp; 
     Rent/Sq. Ft.</font></td> 
    </tr> 
    <tr> 
    <td width="82" align="center" style="height: 23px"><font face="Arial" size="2"> 
    <input type="text" name="SF_Tenant1" id="sqft1" OnFocus="calcRentSQFTOne()" OnKeyUp="calcRentSQFTOne()" OnChange="calcNRA1()" size="10" tabindex="602" class="style4"></font></td> 
    <td width="61" align="center" style="height: 23px"><font face="Arial" size="2"> 
    <input type="text" name="PercNRA_Tenant1" id="NRA1" size="7" tabindex="603"></font></td> 
    <td style="height: 23px; width: 106px;" class="style5"><font face="Arial" size="2"> 
    <strong><font size="2">$ </font></strong> 
    <!--webbot bot="Validation" s-data-type="Number" s-number-separators=",." --><input type="text" name="AnnualRent_Tenant1" id="annualrent1" OnFocus="calcRentSQFTOne()" onblur="this.value = '$' + formatNumber(this.value, 0, 0, true)" OnKeyUp="calcRentSQFTOne()" size="11" tabindex="604"></font></td> 
    <td style="height: 23px; width: 129px;" class="style7"><font face="Arial" size="2"> 
    <strong><font size="2">$ </font></strong> 
    <!--webbot bot="Validation" s-data-type="Number" s-number-separators=",." --><input type="integer" name="RentSF_Tenant1" id="rentsqft1" OnFocus="calcRentSQFTOne()" onblur="this.value = '$' + formatNumber(this.value, 0, 0, true)" readonly="readonly" size="11" tabindex="605"></font></td> 
    </tr> 
    </table> 
&nbsp; 

<p><font face="Arial" size="2"> 
<input type="submit" value="Save" name="Save" tabindex="999" style="font-family: Arial; font-size: 10pt; width: 65px; height: 29px;"></font></p> 
</form> 
<script type="text/javascript"> 
function calcRentSQFTOne(){ 
    SquareFeet1 = document.getElementById("sqft1").value; 
    AnnualRent1 = document.getElementById("annualrent1").value; 

    document.getElementById("rentsqft1").value = 
        (AnnualRent1 * 1) 
             /(SquareFeet1 * 1); 


} 


// 

function formatNumber(number, digits, decimalPlaces, withCommas) 
{ 
    number  = number.toString(); 
var simpleNumber = ''; 

// Strips out the dollar sign and commas. 
for (var i = 0; i < number.length; ++i) 
{ 
    if (".".indexOf(number.charAt(i)) >= 0) 
     simpleNumber += number.charAt(i); 
} 

number = parseFloat(simpleNumber); 

if (isNaN(number))  number  = 0; 
if (withCommas == null) withCommas = false; 
if (digits  == 0) digits  = 1; 

var integerPart = (decimalPlaces > 0 ? Math.floor(number) : Math.round(number)); 
var string  = ""; 

for (var i = 0; i < digits || integerPart > 0; ++i) 
{ 
    // Insert a comma every three digits. 
    if (withCommas && string.match(/^\d\d\d/)) 
     string = "," + string; 

    string  = (integerPart % 10) + string; 
    integerPart = Math.floor(integerPart/10); 
} 

if (decimalPlaces > 0) 
{ 
    number -= Math.floor(number); 
    number *= Math.pow(10, decimalPlaces); 

    string += "." + formatNumber(number, decimalPlaces, 0); 
} 

return Math.round(input*100)/100 + "$"; 

} 





function calcNRA1(){ 
    SquareFeet1 = document.getElementById("sqft1").value; 
    TSF = document.getElementById("TotalSF").value; 

    document.getElementById("NRA1").value = 
        (SquareFeet1 * 1)/(TSF * 1) * 100 
              + "%" ;         

} 


</script> 

</body> 

</html> 
+0

你應該'parseInt函數()'或'parseFloat() 「你的輸入值,因爲它們只是字符串。 – Jasen

回答

0

有幾個問題與你的腳本,如果解決可以使你的腳本更易於調試和管理,使之不容易出錯。

  1. 將字符串連接與數值計算混合。相反,將所有值轉換爲數值,然後計算,然後連接並格式化。以數字形式存儲計算結果,並且只有在準備好顯示時才格式化。

  2. 簡化您的功能,以便它只做一件事:將格式化的「數字」轉換爲數字值或將數值轉換爲格式化的字符串。重構formatNumber做的只有一件事,使第二功能做其他(如formatNumber()formatNumber()convertToNumeric()

// convert to numeric type, default to 0 if empty(?) 
var SquareFeet1 = convertToNumeric(document.getElementById("sqft1").value); 
var TSF = convertToNumeric(document.getElementById("TotalSF").value); 

// calculate and store as numeric values 
var nra = SquareFeet1/TSF * 100; 

// format and concatenate for display 
var nraInput = document.getElementById("NRA1"); 
if (nra > 0) { 
    nraInput.value = formatNumber(nra) + "%" ; 
} 
else { 
    nraInput.value = ""; 
} 
+0

當任何值輸入逗號時,這似乎仍然給我一個南。即10,000 – user2283263

+0

哪個字段和你的哪些函數或計算給你NaN?瀏覽器的調試控制檯(通常是F12)將幫助您確定。 – Jasen