【问题标题】:Internet Explorer: Unable to set property 'value' of undefined or null referenceInternet Explorer:无法设置未定义或空引用的属性“值”
【发布时间】:2016-05-20 01:21:41
【问题描述】:

我有一个 javascript 计算器,它可以在除 Internet Explorer 之外的所有浏览器中正常工作。我需要知道为什么 Internet Explorer 在第 14 行给我这个错误:“无法设置未定义或空引用的属性'值'。”

这是计算器代码:

<meta http-equiv="x-ua-compatible" content="IE=10">
<script>

function showpay() {
"use strict";
if ((document.loanCalc.loan.value === null || document.loanCalc.loan.value.length === 0) ||
        (document.loanCalc.months.value === null || document.loanCalc.months.value.length === 0)
        ||
        (document.loanCalc.rate.value === null || document.loanCalc.rate.value.length === 0)) { document.loanCalc.pay.value = " ";
    } else {
     var princ = document.loanCalc.loan.value;
     var term  = document.loanCalc.months.value;
     var intr   = document.loanCalc.rate.value / 1200;
     document.loanCalc.pay.value = Math.round(princ * intr / (1 - (Math.pow(1 / (1 + intr), term))));
}
// payment = principle * monthly interest/(1 - (1/(1+MonthlyInterest)*Months))
}

</script>


<form name=loanCalc method=POST>
<table class="calculator">

<tr><td>Loan Amount</td><td align=right><input type=number onInput='showpay()' name=loan size=10 value="15000"></td></tr>

<tr><td>Term in Months</td><td align=right><input type=number onInput='showpay()' name=months size=10 value="60"></td></tr>

<tr><td>Interest Rate</td><td align=right><input type=number onInput='showpay()' name=rate size=10 value="1.99"></td></tr>

<tr><td>Monthly Payment</td></tr>

<tr><td align=left class=result><span>$</span><output name=pay>263</output></td></tr>

</table>
</form>

Internet Explorer 的调试器在第 14 行显示“无法设置未定义或空引用的属性‘值’”:document.loanCalc.pay.value = Math.round(princ * intr / (1 - (Math.pow(1 / (1 + intr), term))));

该代码可在 Chrome、Safari 和 Firefox 中正常工作。您可以在此页面上查看正在运行的计算器:http://bloomcu.com/test-page/

为什么我在 Internet Explorer 中收到此错误?

【问题讨论】:

  • 您可以在此页面上看到正在运行的计算器:bloomcu.com/test-page
  • 这是因为您的 HTML 无处不在。缺少或不一致的报价。您的字段项没有 ID。 td align=right 无论如何都已弃用且无法使用...
  • 尖刻的回答:“Internet Explorer”——你回答了你自己的问题。
  • IE 不支持 html5 标签,这就是 document.loanCalc.pay 未定义的原因
  • @Z.Z.有趣的。我可以用什么来代替

标签: javascript internet-explorer undefined undefined-reference


【解决方案1】:

这是更正的一行(根据我的评论)

<tr><td>Loan Amount </td><td><input type="number" onInput="showpay()" name="loan" id="loan" size="10" value="15000" style="text-align:right"></td></tr>

如果你都这样修复它们,它会更加朝着无处不在的方向工作。

【讨论】:

  • 谢谢。我进行了这些更改,但它仍然无法在 Explorer 中运行。还有其他想法吗?
【解决方案2】:

如果可以的话,你可以在IE上试试这个

<meta http-equiv="x-ua-compatible" content="IE=10">
<script>
document.loanCalc.pay = document.getElementById("pay");

function showpay() {
    "use strict";
    if ((document.loanCalc.loan.value === null || document.loanCalc.loan.value.length === 0) ||
        (document.loanCalc.months.value === null || document.loanCalc.months.value.length === 0)
        ||
        (document.loanCalc.rate.value === null || document.loanCalc.rate.value.length === 0)) { document.loanCalc.pay.innerHTML = " ";
    } else {
     var princ = document.loanCalc.loan.value;
     var term  = document.loanCalc.months.value;
     var intr   = document.loanCalc.rate.value / 1200;
     document.loanCalc.pay.innerHTML = Math.round(princ * intr / (1 - (Math.pow(1 / (1 + intr), term))));
}
// payment = principle * monthly interest/(1 - (1/(1+MonthlyInterest)*Months))
}

</script>


<form name=loanCalc method=POST>
<table class="calculator">

<tr><td>Loan Amount</td><td align=right><input type=number onInput='showpay()' name=loan size=10 value="15000"></td></tr>

<tr><td>Term in Months</td><td align=right><input type=number onInput='showpay()' name=months size=10 value="60"></td></tr>

<tr><td>Interest Rate</td><td align=right><input type=number onInput='showpay()' name=rate size=10 value="1.99"></td></tr>

<tr><td>Monthly Payment</td></tr>

<tr><td align=left class=result><span>$</span><span id='pay'>263</span></td></tr>

</table>
</form>

【讨论】:

    【解决方案3】:

    @Z.Z.正确:资源管理器不支持&lt;output&gt; 标签。因此,我将&lt;output&gt;替换为&lt;input&gt;,然后使用disabled="disabled",以防止用户更改计算结果。

    最终代码如下所示:

    <meta http-equiv="x-ua-compatible" content="IE=10">
    <script>
    
    function showpay() {
    "use strict";
    
    if ((document.loanCalc.loan.value === null || document.loanCalc.loan.value.length === 0) ||
            (document.loanCalc.months.value === null || document.loanCalc.months.value.length === 0) ||
            (document.loanCalc.rate.value === null || document.loanCalc.rate.value.length === 0)) 
        { document.loanCalc.pay.value = " ";
    } 
    
    else {
         var princ = document.loanCalc.loan.value;
         var term  = document.loanCalc.months.value;
         var intr   = document.loanCalc.rate.value / 1200;
         document.loanCalc.pay.value = Math.round(princ * intr / (1 - (Math.pow(1 / (1 + intr), term))));
    }
    // payment = principle * monthly interest/(1 - (1/(1+MonthlyInterest)*Months))
    }
    
    </script>
    
    <form name=loanCalc method=POST>
    <table class="calculator">
    
    <tr><td>Loan Amount</td><td><input type="number" onInput="showpay()" name="loan" id="loan" size="10" value="15000"></td></tr>
    
    <tr><td>Term in Months</td><td><input type="number" onInput="showpay()" name="months" id="months" size="10" value="60"></td></tr>
    
    <tr><td>Interest Rate</td><td><input type="number" onInput="showpay()" name="rate" id="rate" size="10" value="1.99"></td></tr>
    
    <tr><td>Monthly Payment</td></tr>
    
    <tr><td class=result><span>$</span><input name="pay" id="pay" value="263" disabled="disabled"></input></td></tr>
    
    </table>
    </form>
    

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 2015-03-30
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多