Javascript 使用jquery根据4个输入的总和设置数字输入最大值

Javascript 使用jquery根据4个输入的总和设置数字输入最大值,javascript,jquery,html,Javascript,Jquery,Html,我有4个输入字段,我需要所有字段的总数不超过100。我想设置正在更改的字段的最大值 我一直在尝试调整keyup()上的值,然后将其他字段的总数与当前值进行差值,并设置最大值。似乎可以工作一段时间,然后停止 将$fieldC.keyup更改为$fieldC.Change尝试jQueryinput和propertychange处理程序: var-acfs; $(函数(){ acfs=$('input[type=text][id^=acf-field_55dc6669f523]);//缓存一次 a

我有4个输入字段,我需要所有字段的总数不超过100。我想设置正在更改的字段的最大值

我一直在尝试调整keyup()上的值,然后将其他字段的总数与当前值进行差值,并设置最大值。似乎可以工作一段时间,然后停止


$fieldC.keyup
更改为
$fieldC.Change

尝试jQuery
input
propertychange
处理程序:

var-acfs;
$(函数(){
acfs=$('input[type=text][id^=acf-field_55dc6669f523]);//缓存一次
acfs.on('InputPropertyChange',校验和);
});
var max=100;
var校验和=函数(e){
this.value=this.value.replace(//\D/g',);//仅限数字
var总和=0;
var fn=函数(){
sum+=+this.value | | 0;//将单个文本框值解析为int
};
各ACF(fn);
if(max

尝试利用
输入
事件、
获取()
数组.prototype.map()
数组.prototype.reduce()
数学.max
数组.prototype.sort()


如果所有
输入
元素的总值大于
最大值
100
,则在元素集合中具有最大值的
输入
的递减值;如果
event.target
带有
input
change
事件是具有最大值的元素,则具有下一个最大值的元素的递减值

var inputs=$(“输入[id^=acf]”),
最大值=100;
输入。开启(“输入”,功能(e){
var input=inputs.get(),
VAL=input.map(函数(el){
返回编号(el.值)
}),
总计=VAL.REDUCT(功能(a,b){
返回a+b
})
,el=输入。排序(函数(a,b){
返回a.value>b.value
});
如果(总数>最大值){
$(el).eq($(el[el.length-1])是(e.target)
?标高长度-2
:el.长度-1)
.val(函数(i,val){
返回编号(val)-(总计%MAX)
});
}
});

我将这样做,详细信息请参见代码中的注释:

$('.acf追加')。焦点(函数(){
$(this.val(“”);//在当前输入被聚焦时清除它
var total=0;//创建一个var以跟踪当前总计
$('.acf被追加')。每个(function(){//循环遍历每个元素
total=total+Number($(this).val());//将当前值添加到正在运行的总数中
$(this.attr('max',Number($(this.val());//将每个元素的最大值设置为当前保留的值
});
var remaining=100-total;//在达到100之前计算出剩下多少
$(this.attr('max',remaining);//设置当前元素的最大值以匹配剩余限制
});
//这将处理步进器,请注意,最大值不会阻止用户输入高于限制的值
//如果需要,也可以将其设置为这样,键入更大的值将默认为最大值
$('.acf被追加').keyup(函数(){
if(Number($(this.val())>Number($(this.attr('max')){
$(this.val($(this.attr('max'))
}
});

就这个怎么样

$("input[type='number'].acf-is-appended").change(function () {
    $.each($("input[type='number'].acf-is-appended"), function (index, element) {
        var total = 0;
        $.each($("input[type='number'].acf-is-appended").not($(element)), function (innerIndex, innerElement) {
            total += parseInt($(innerElement).val());
        });
        if ($(element).val() > 100 - total) {
            alert("The total value for all inputs can not exceed 100");
            return false;
        } else {
            $(element).attr("max", 100 - total);
        }
    });
});

似乎有点作用,那么停下来,你能解释一下吗?正如@Lalji Tadhani在他的回答中提到的,为什么
fieldC
keyup
,而其他人有
更改
。复制这个问题,这样我们就能解决它。
$("input[type='number'].acf-is-appended").change(function () {
    $.each($("input[type='number'].acf-is-appended"), function (index, element) {
        var total = 0;
        $.each($("input[type='number'].acf-is-appended").not($(element)), function (innerIndex, innerElement) {
            total += parseInt($(innerElement).val());
        });
        if ($(element).val() > 100 - total) {
            alert("The total value for all inputs can not exceed 100");
            return false;
        } else {
            $(element).attr("max", 100 - total);
        }
    });
});