提问人:Derik 提问时间:2/10/2016 最后编辑:Derik 更新时间:10/18/2023 访问量:8110
Internet Explorer:无法设置未定义或空引用的属性“值”
Internet Explorer: Unable to set property 'value' of undefined or null reference
问:
我有一个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 中收到此错误?
答:
0赞
durbnpoisn
2/10/2016
#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>
如果你把它们都这样修复,它将更朝着无处不在的方向发展。
评论
0赞
Derik
2/10/2016
谢谢。我进行了这些更改,但它在资源管理器中仍然不起作用。还有其他想法吗?
0赞
Z.Z.
2/10/2016
#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>
0赞
Derik
2/10/2016
#3
@Z.Z. 是正确的:Explorer 不支持该标记。因此,我用 和 替换,以防止用户更改计算结果。<output>
<output>
<input>
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>
谢谢大家的帮助。
评论