Javascript .onchange未始终拾取对输入的更改
当我更改输入type=“number”id=“homevalue”时,它不会触发更改,直到我更改另一个输入。所有其他输入都会立即触发变化,我看不出有什么区别可以解释这一点:Javascript .onchange未始终拾取对输入的更改,javascript,html,input,onchange,Javascript,Html,Input,Onchange,当我更改输入type=“number”id=“homevalue”时,它不会触发更改,直到我更改另一个输入。所有其他输入都会立即触发变化,我看不出有什么区别可以解释这一点: <body style="font-family: arial;"> <form name="repaymentcalc" action=""> <div align="center"> </br> <p> H
<body style="font-family: arial;">
<form name="repaymentcalc" action="">
<div align="center">
</br>
<p>
Home Value £
<input type="number" id="homevalue" value="250000" style="width: 75px">
</p>
<p>
Loan Amount £
<input type="number" id="loanamount" value="200000" style="width: 75px">
</p>
<p>
Interest Rate
<input type="number" id="interestrate" value="3.00" style="width: 50px">%
</p>
Term
<input type="range" id="numberpayments" value="25" min="1" max="40" style="width: 100px">
<div id="years" style="display:inline-block;">25 years
</div>
<div id="repayments">Monthly Repayment: £948.42</div>
<p>
<div id="ltv">Loan to Value: 80.0%</div>
</div>
</form>
<script>
window.onload = function() {
document.repaymentcalc.loanamount.onchange = repayment;
document.repaymentcalc.interestrate.onchange = repayment;
document.repaymentcalc.numberpayments.onchange = repayment;
}
function repayment() {
var x = parseInt(document.repaymentcalc.loanamount.value, 10);
var y = parseInt(document.repaymentcalc.interestrate.value * 100, 10) / 120000;
var z = parseInt(document.repaymentcalc.numberpayments.value, 10) * 12;
var h = parseInt(document.repaymentcalc.homevalue.value, 10);
var repayment = y * x * Math.pow((1 + y), z) / (Math.pow((1 + y), z) - 1);
var loantovalue = x / h * 100;
var year = z / 12;
document.getElementById("repayments").innerHTML = 'Monthly Repayment: £' + repayment.toFixed(2);
document.getElementById("ltv").innerHTML = 'Loan to Value: ' + loantovalue.toFixed(1) + '%';
document.getElementById("years").innerHTML = year + ' years';
}
</script>
房屋价值
贷款金额:
利率
%
学期
25年
每月还款:948.42英镑
贷款价值比:80.0%
window.onload=函数(){
document.returnmentcalc.loanamount.onchange=还款;
document.returnmentcalc.interestrate.onchange=还款;
document.returnmentcalc.numberpayments.onchange=还款;
}
功能偿还(){
var x=parseInt(document.returnmentcalc.loanamount.value,10);
var y=parseInt(document.returnmentcalc.interestrate.value*100,10)/120000;
var z=parseInt(document.returnmentcalc.numberpayments.value,10)*12;
var h=parseInt(document.returnmentcalc.homevalue.value,10);
var还款=y*x*数学功率((1+y),z)/(数学功率((1+y),z)-1;
var loantovalue=x/h*100;
风险年=z/12;
document.getElementById(“还款”).innerHTML=“每月还款:£”+还款。固定(2);
document.getElementById(“ltv”).innerHTML='Loan-to-Value:'+loantovalue.toFixed(1)+'%;
document.getElementById(“年”).innerHTML=年+年;
}
任何帮助都将不胜感激:)
谢谢。它从未执行的原因是因为你失踪了
document.repaymentcalc.homevalue.onchange = repayment;
你试试这个
window.onload = function() {
document.repaymentcalc.homevalue.onchange = repayment;
document.repaymentcalc.loanamount.onchange = repayment;
document.repaymentcalc.interestrate.onchange = repayment;
document.repaymentcalc.numberpayments.onchange = repayment;
}
也许可以使用
oninput
代替数字输入onchange
仅在数字类型中使用本机数字选择器时才会触发
请参阅下面的代码段,其中包括了两种类型的事件处理程序
(函数(){
var inp=document.querySelector('input'),
logChange=函数(){
log(“发生了变化”);
},
logInput=function(){
log(“有输入”);
};
inp.onchange=logChange;
inp.oninput=登录输入;
}());代码>
试试这个:
如果通过鼠标单击更改值,则还需要onmouseup事件。用户可以通过单击箭头按钮或输入键盘来更改值,在下面的示例中,这两种情况都可以处理
window.onload=function(){
document.returnmentcalc.loanamount.onkeyup=还款;
document.returnmentcalc.interestrate.onkeyup=还款;
document.returnmentcalc.numberpayments.onkeyup=还款;
document.returnmentcalc.loanamount.onmouseup=还款;
document.returnmentcalc.interestrate.onmouseup=还款;
document.returnmentcalc.numberpayments.onmouseup=还款;
};
功能偿还(){
console.log(“此处”);
var x=parseInt(document.returnmentcalc.loanamount.value,10);
var y=parseInt(document.returnmentcalc.interestrate.value*100,10)/120000;
var z=parseInt(document.returnmentcalc.numberpayments.value,10)*12;
var h=parseInt(document.returnmentcalc.homevalue.value,10);
var还款=y*x*数学功率((1+y),z)/(数学功率((1+y),z)-1;
var loantovalue=x/h*100;
风险年=z/12;
document.getElementById(“还款”).innerHTML=“每月还款:£”+还款。固定(2);
document.getElementById(“ltv”).innerHTML='Loan-to-Value:'+loantovalue.toFixed(1)+'%;
document.getElementById(“年”).innerHTML=年+年;
}
房屋价值
贷款金额:
利率
%
学期
25年
每月还款:948.42英镑
贷款价值比:80.0%
它不会触发,因为您尚未为homevalue
定义onchange
事件。您可以添加如下内容
window.onload = function() {
document.repaymentcalc.homevalue.onchange = repayment;
document.repaymentcalc.loanamount.onchange = repayment;
document.repaymentcalc.interestrate.onchange = repayment;
document.repaymentcalc.numberpayments.onchange = repayment;
}
而且,homevalue
的值很大,它实际上会发生变化,但不会因为精度而受到影响。我已经在演示中更改了homevalue,您可以尝试完全运行演示。尝试使用jQuery blur
event您可以尝试onkeyup。另外,您没有使用jquery,因此不需要该标记(除非您想使用它),请尝试在该元素的onkeyup
事件上设置事件处理程序。您没有为homevalue设置onchange事件。您可以看到wokring演示