JavaScript功能不适用于Chrome和IE,但适用于FireFox

问题描述:

最近我开发了有很多实时计算选项的系统。我已经在Firefox上测试这些功能,但是当我尝试在Chorme中运行此程序时,它不起作用。它没有显示结果JavaScript功能不适用于Chrome和IE,但适用于FireFox

function premiumCalculation(){ 

var shortPeriodRate = 100; 
var spr    = document.getElementById("policyPeriod"); 
shortPeriodRate  = parseInt(spr.options[spr.selectedIndex].value); 
var shortPeriodDate = spr.options[ spr.selectedIndex ].text; 
//================== hidden assign ====================================================== 
document.getElementById("policyPeriodInput").value = spr.options[spr.selectedIndex].text; 
//======================================================================================= 

var sumInsured = document.getElementById("sumInsuredValue").value; 
var basicRate = document.getElementById("basicRate").value; 
var srcc = document.getElementById("srccRateInput").value; 
var tc  = document.getElementById("tcRateInput").value;  

//============================= BASIC PREMIUM CALCULATION ========================================== 
var shortPrecentage = parseFloat(shortPeriodRate)/100; 
var basicPremium = ((parseFloat(sumInsured) * parseFloat(basicRate)) * parseFloat(shortPrecentage)/100); 
if(basicPremium < 500){basicPremium = 500;} 
document.getElementById("basicPremium").innerHTML = money_format(basicPremium); 
document.getElementById("basicPremiumInput").value = basicPremium; 
//=================================================================================================== 


var currentDate = new Date(); 
var nextDate = ''; 

var spd   = shortPeriodDate.split(" "); 
var spdDate  = spd[0]; 

//================ FOR 3 & 10 DAYS =============================== 
if(shortPeriodRate == 5 || shortPeriodRate == 10){ 
    var month  = currentDate.getMonth()+ 1; 
    var day   = currentDate.getDate() + parseFloat(spdDate); 
    var year  = currentDate.getFullYear(); 
    if(month < 10){ month = "0" + month;} 
    nextDate  = (year + '/' + month + '/' + day); 
    nextDate  = new Date(nextDate); 
    nextDate  = nextDate.toLocaleFormat('%Y-%m-%d'); 
    } 
//================================================================ 
//================ FOR Months ============================================== 
if(shortPeriodRate != 5 && shortPeriodRate != 10 && shortPeriodRate != 25){ 
    var month  = (currentDate.getMonth()+ 1) + parseFloat(spdDate); 
    var day   = currentDate.getDate(); 
    var year  = currentDate.getFullYear(); 
    if(month < 10){ month = "0" + month;} 
    nextDate  = (year + '/' + month + '/' + day); 
    nextDate  = new Date(nextDate); 
    nextDate  = nextDate.toLocaleFormat('%Y-%m-%d'); 
    } 
//=========================================================================== 
//========================= DATE DIFFERENCE ========================================== 
var oneDay  = 24*60*60*1000;  
var firstDate  = new Date(currentDate); 
var secondDate  = new Date(nextDate); 
var dateDifference = Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)); 
dateDifference  = Math.round(dateDifference); 
//==================================================================================== 
//===================== SRCC PREMIUM CALCULATION ============================================== 
var srccLogic  = document.getElementById('strikeRiot').value; //alert(srccLogic); 
if(srccLogic == 'yes'){ 
var srccPrecentage = parseFloat(dateDifference)/365; 
var srccPremium  = (parseFloat(sumInsured) * parseFloat(srcc) * parseFloat(srccPrecentage)/100); 
document.getElementById("srccPremium").innerHTML  = money_format(srccPremium); 
document.getElementById("srccPremiumInput").value  = srccPremium; 
} else { 
srccPremium  = 0; 
srccPrecentage = 1; 
document.getElementById("srccPremium").innerHTML  = money_format(srccPremium); 
document.getElementById("srccPremiumInput").value  = srccPremium; 
} 
//============================================================================================= 
//========================= TC PREMIUM CALCULATION ========================================== 
var tcLogic   = document.getElementById('terrorism').value; //alert(srccLogic); 
if(tcLogic == 'yes'){ 
var tcPrecentage = parseFloat(dateDifference)/365; 
var tcPremium  = (parseFloat(sumInsured) * parseFloat(tc) * parseFloat(tcPrecentage)/100); 
document.getElementById("tcPremium").innerHTML   = money_format(tcPremium); 
document.getElementById("tcPremiumInput").value   = tcPremium; 
} else { 
tcPremium  = 0; 
tcPrecentage = 1; 
document.getElementById("tcPremium").innerHTML   = money_format(tcPremium); 
document.getElementById("tcPremiumInput").value   = tcPremium; 
} 
//=========================================================================================== 
//==================== ADMIN FEE CALCULATION ======================================= 
    var adminFeeTotal  = basicPremium + srccPremium + tcPremium; 
var adminFee  = (parseFloat(adminFeeTotal) * 0.3)/100 ; 
document.getElementById("adminFee").innerHTML   = money_format(adminFee); 
document.getElementById("adminFeeInput").value   = adminFee; 
//================================================================================== 
//================== POLICY FEE====================================== 
document.getElementById("policyFee").innerHTML   = "450.00"; 
document.getElementById("policyFeeInput").value   = "450"; 
//=================================================================== 
//================== STAMPFEE CALCULATION =========================== 
var totalUp   = parseFloat(basicPremium) + parseFloat(srccPremium) + parseFloat(tcPremium) + parseFloat(adminFee) + parseFloat(450); 
var stampFee  = Math.round((totalUp * 0.1)/100); 
var stampFeeS  = (totalUp * 0.1)/100; 
var roundUpString = stampFeeS.toString(); 
var roundUpVal  = roundUpString.split("."); 
var roundUpValT  = roundUpVal[1]; var roundUpValTV = parseFloat(roundUpValT); 
//if(roundUpValTV > 0){ stampFee = stampFee + 1;} 
document.getElementById("stampFee").innerHTML   = money_format(stampFee); 
document.getElementById("stampFeInput").value   = stampFee; 
//================================================================================ 
//================= NBT CALCULATION ============================================== 
var nbtPremium  = ((totalUp * 2)/98); 
document.getElementById("nbt").innerHTML    = money_format(nbtPremium); 
document.getElementById("nbtInput").value    = nbtPremium; 
//================================================================================ 
//================ VAT CALCULATION =============================================== 
var totalForVAT  = parseFloat(totalUp) + parseFloat(nbtPremium); 
var VATPremium  = ((totalForVAT * 12)/100); 
document.getElementById("vat").innerHTML    = money_format(VATPremium); 
document.getElementById("vatInput").value    = VATPremium; 
//================================================================================ 
//=============== GROSS CALCULATION ================ 
var grossPremium = parseFloat(totalForVAT) + parseFloat(stampFee); 
document.getElementById("grossPremium").innerHTML  = money_format(grossPremium); 
document.getElementById("grossPremiumInput").value  = grossPremium; 
//================================================== 
//=============== NETPREMIUM CALCULATION =========== 
var netPremium  = parseFloat(grossPremium) + parseFloat(VATPremium); 
document.getElementById("netPremium").innerHTML   = money_format(netPremium); 
document.getElementById("netPremiumInput").value  = netPremium; 
//================================================== 

}

enter image description hereenter image description here

+0

您是否检查过控制台是否有任何错误? – 0x47686F7374 2014-10-06 09:04:41

+0

Uncaught TypeError:undefined不是函数 但它在FireFox上正常工作 – 2014-10-06 09:07:06

+0

在该错误的右侧应该有一些格式为'file:line'的文本,请检查该行。 – 0x47686F7374 2014-10-06 09:08:10

基于你开始话题的评论,你可以简单地检测/改写缺少的功能:

Date.prototype.toLocaleFormat = Date.prototype.toLocaleFormat || function(pattern) { 
    return pattern.replace(/%Y/g, this.getFullYear()).replace(/%m/g, (this.getMonth() + 1)).replace(/%d/g, this.getDate()); 
}; 

重写将在全球范围内可用,您可以使用此进行测试

+0

..这在这里代表什么?? ??它是代表日期=新日期()即日期? – 2014-10-06 09:49:58

+0

因为你正在建立一个函数原型,所以它是Date对象本身 – Icepickle 2014-10-06 09:52:40

+0

谢谢..但现在我得到了一个不同的问题。在这个即时添加3天,10天,1个月,3个月等等。 当它超过3个月,这意味着2015年它给了我空值的日期! – 2014-10-06 09:55:06