Javascript onclick事件未在Firefox中触发

时间:2012-04-03 08:10:22

标签: javascript function onclick

我有一个在IE和Chrome中调用时有效的功能,但它在Firefox中根本不起作用。这是功能:

function  calcDebt(){
var totaldebt=0;
var curBalance=0;
var totRepay =0;
var totMonths=0;
var curMonthAmount=0;
var curRate=0;
for($i=1;$i<=6; $i++){
    curBalance = document.getElementById('balance'+$i).value;
    curRate = document.getElementById('rate'+$i).value;
    curMonthAmount=document.getElementById('monthly'+$i).value;
    if(curBalance>0 && curMonthAmount>0 && curRate>0){
        var remainingBalance=curBalance;
        var mRate=(curRate/100)/12;
        var months=0;
        var payment=curBalance*(mRate)/( 1-Math.pow((1+mRate),(0)) );
        payment=Math.round(payment*100)/100;
        while (remainingBalance>0)
        {
            months++;
            remainingBalance=remainingBalance*(1 + mRate)-curMonthAmount;
        }
        totRepay = totRepay+(curMonthAmount*months);
        totMonths += months;
        totaldebt += (curBalance*1);
    }
}
document.getElementById('totalDebt').innerText = totaldebt.toFixed(2);
document.getElementById('conBalance').innerText = totaldebt.toFixed(2);
document.getElementById('totalMonths').innerText = totMonths;
document.getElementById('totalRepayment').innerText = totRepay.toFixed(2);

document.getElementById('finalMonthly').value = '';
    document.getElementById('finalTerm').value = '';
    document.getElementById('finalPayment').value = '';

}

HTML:

    <table>
    <thead>

            <td scope="col">Balance remaining</td>
            <td scope="col">Interest rate</td>
            <td scope="col">Monthly payment</td>
    </thead>

    <tbody>
<tr>
            <td><input size=3 type=text id="balance1"></td>
            <td><input size=1 type=text id="rate1"></td>
            <td><input size=3 type=text id="monthly1"></td>
        </tr>
        <tr>
            <td><input size=3 type=text id="balance2"></td>
            <td><input size=1 type=text id="rate2"></td>
            <td><input size=3 type=text id="monthly2"></td>
        </tr>
        <tr>
            <td><input size=3 type=text id="balance3"></td>
            <td><input size=1 type=text id="rate3"></td>
            <td><input size=3 type=text id="monthly3"></td>
        </tr>
        <tr>
            <td><input size=3 type=text id="balance4"></td>
            <td><input size=1 type=text id="rate4"></td>
            <td><input size=3 type=text id="monthly4"></td>
        </tr>
        <tr>
            <td><input size=3 type=text id="balance5"></td>
            <td><input size=1 type=text id="rate5"></td>
            <td><input size=3 type=text id="monthly5"></td>
        </tr>
        <tr>
            <td><input size=3 type=text id="balance6"></td>
            <td><input size=1 type=text id="rate6"></td>
            <td><input size=3 type=text id="monthly6"></td>
        </tr>
        <tr>
        <td colspan="4"><input type=button class="button" value="Calculate" onclick="calcDebt();"></td>
        </tr>
        <tr class="con">
        <td colspan="4">Results</td>
        </tr>
        <tr>
        <td colspan="1">Total debt:</td>
        <td class="results" colspan="3"><label id="totalDebt">0</label></td>
        </tr>
        <tr>
        <td colspan="1">Debt free in:</td>
        <td class="results"><label id="totalMonths">0</label> months</td>
        </tr>
        <tr>
        <td colspan="1">Total repayment:</td>
        <td class="results" colspan="3">£<label id="totalRepayment">0</label></td>
        </tr>

有什么理由说这不适用于Firefox吗?使用Firebug我可以看到它告诉我conBalance在定义时是未定义的。

有什么想法吗?感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

Firefox不支持innerText属性,该属性在HTML5之前是非标准的。相反,它支持textContent属性,该属性在大约8年前被标准化。所以你有代码如下:

document.getElementById('conBalance').innerText = totaldebt.toFixed(2);

简单的解决方法是改为设置innerHTML属性。

或者,您可以使用 setText 函数,如:

function setText(el, text) {
  if (typeof el.textContent == 'string') {
    el.textContent = value;
  } else if (typeof el.innerText == 'string') {
    el.innerText = value;
  }
}

然后称之为:

setText(document.getElementById('conBalance'), totaldebt.toFixed(2));