Javascript 输入两个输入,填充第三个输入

Javascript 输入两个输入,填充第三个输入,javascript,jquery,input,Javascript,Jquery,Input,我有一张有三个输入的表格。我希望能够填写其中两个字段,并自动填写第三个字段 所以,它应该是这样工作的: -我填写第一个和第二个,第三个进行计算 -我填写第一个和最后一个,第二个得到计算 -我填写了第二个和最后一个,第一个得到计算 我想出了这个密码: $(document).on('keyup change','data calc',function(){ 变量a=$('[data calc=a]'), aV=a.val(), b=$(“[data calc=b]”), bV=b.val(),

我有一张有三个输入的表格。我希望能够填写其中两个字段,并自动填写第三个字段

所以,它应该是这样工作的:
-我填写第一个和第二个,第三个进行计算
-我填写第一个和最后一个,第二个得到计算
-我填写了第二个和最后一个,第一个得到计算

我想出了这个密码:

$(document).on('keyup change','data calc',function(){
变量a=$('[data calc=a]'),
aV=a.val(),
b=$(“[data calc=b]”),
bV=b.val(),
c=$('[data calc=c]'),
cV=c.val();
如果(平均长度!=0&&bV.length!=0){
cV=parseInt(aV)+parseInt(bV);
c、 val(cV).prop('disabled',true);
}
否则如果(平均长度!=0和&cV.length!=0){
bV=parseInt(cV)-parseInt(aV);
b、 val(bV).prop('disabled',true);
}
否则如果(bV.length!=0和&cV.length!=0){
aV=parseInt(cV)-parseInt(bV);
a、 val(aV).道具(“禁用”,真实);
}
否则{
$('[data calc]').prop('disabled',false);
}
});


+

=

问题在于您同时绑定了
keyup
change
事件。从代码中删除
更改
,即可设置为转到:-)

当您在第三个字段中键入一个值时,首先触发
keyup
事件,一切正常,当焦点移出第三个字段时,触发
change
事件,这反过来会禁用它,因为第一个和第二个字段都有值

$(document).on('blur','[data calc]',function(){
变量a=$('[data calc=a]'),
aV=a.val(),
b=$(“[data calc=b]”),
bV=b.val(),
c=$('[data calc=c]'),
cV=c.val();
如果(平均长度!=0&&bV.length!=0){
cV=parseInt(aV)+parseInt(bV);
c、 val(cV).prop('disabled',true);
}
否则如果(平均长度!=0和&cV.length!=0){
bV=parseInt(cV)-parseInt(aV);
b、 val(bV).prop('disabled',true);
}
否则如果(bV.length!=0和&cV.length!=0){
aV=parseInt(cV)-parseInt(bV);
a、 val(aV).道具(“禁用”,真实);
}
否则{
$('[data calc]').prop('disabled',false);
}
});


+

=

应该是这样的,您应该检查编辑了哪个元素

$(document).on('keyup change','data calc',函数(事件){
var$this=$(event.target | | event.src元素),
calc=$this.data('calc'),
$newCalc,
一美元,
b美元,
$c,
aV,
bV,
个人简历
如果(!计算){
返回;
}
$a=$('input[data calc=a]');
$b=$('input[data calc=b]');
$c=$('input[data calc=c]');
$('input[data calc]').prop('disabled',false);
aV=数字($a.val());
bV=数量($b.val());
cV=数量($c.val());
如果(计算=='a'){
如果(!!aV&&!!bV){
$newCalc=$c.val(aV+bV);
}否则如果(!!aV&&!!cV){
$newCalc=$b.val(cV-aV);
}
}否则如果(计算=='b'){
如果(!!aV&&!!bV){
$newCalc=$c.val(aV+bV);
}否则如果(!!bV&&!!cV){
$newCalc=$a.val(cV-bV);
}
}否则如果(计算=='c'){
如果(!!aV&&!!cV){
$newCalc=$b.val(cV-aV);
}否则如果(!!bV&&!!cV){
$newCalc=$a.val(cV-bV);
}
}
if($newCalc){$newCalc.prop('disabled',true);}
});


+

=

b.val(bV).prop('disabled',true)将禁用第二个输入…您希望禁用哪个字段?我猜应该是这样的…双重绑定是问题所在。我的回答中的细节:-)它是有效的。同样,问题是您在底部字段中输入的两位数。在第一个数字(1)之后,您得到了逻辑,然后在secont
键控
上,顶部和中间字段中已经有了值。我建议将事件更改为模糊,并避免预先计算。。。无论如何,否决票并不酷:-)