在一组微调器中,在更改微调器值时更新其他微调器的最大值

时间:2015-10-19 12:14:21

标签: javascript jquery jquery-ui jquery-spinner

我遇到过一个场景,我们有三个输入微调器,如果任何微调器值更改,那么最初的最大值现在设置为20,那么其他微调器的最大值也应该更改。 示例:有三个微调器spinner1,spinner2,spinner3,max为20,如果最初spinner1设置为3则spinner2和spinner3应该能够选择最大值直到17,现在spinner2被选为10然后spinner3只能选择最大值7,现在如果微调器1再次变为1,则spinner2和spinner3应该能够选择剩余的20-(1 + 10)值的最大值。

1 个答案:

答案 0 :(得分:1)

老实说,这类问题并不适合SO。当一个人来到这里寻求帮助时,我们通常希望他们自己合理地尝试编写代码,但遇到了他们无法解决的特定问题。

我们还希望提问者能够显示他们遇到问题的实际代码,并能够清楚地表达他们的代码的预期结果,以及描述他们当前的尝试如何无法满足期望。

话虽如此,我今天早上需要休息所以请看下面的内容,它应该完全符合你的需要。查看代码,如果您对某些工作有何疑问,请随时提出:



FBSDKLoginCompletion

$('.restrain').change(function(){
	var $this=$(this); // cache the spinner the user interacted with
    var $group=$(this).closest('.restrain-group'); // get the group that contains the spinner
    var maxAllowed=$group.data('restrain-group-max'); // get the group max from the data attribute on the container
    var $spinners=$.merge($group.find('.restrain').not(this), $this); // get all of the spinners for the current group, arrange the collection so that the current spinner is always last, this is VERY important
        
    var total=0; // store our running total
    $spinners.each(function(){
	    var $this=$(this); //cache the current spinner in the loop
        var curVal=Number($this.val()); // get the current spinner's value
        var newVal=total+curVal;// add the value to the running total
        if(newVal>maxAllowed){ // if the running  total is now higher than the maxAllowed, we've gone too high
            var adjustVal=newVal-maxAllowed; // figure out how much over the total we are
            var replacementVal=curVal-adjustVal; // subtract the overage from the current spinner's value
                replacementVal = replacementVal <0 ? 0 :replacementVal;
            $this.val(replacementVal); // set the current spinner to the lowered value
            curVal=replacementVal; 
        }
        total=total+curVal; // add the last value to the total before checking the next spinner
    });
});
&#13;
&#13;
&#13;