表格输入数字的最大变量

时间:2013-02-25 04:16:21

标签: javascript html html5

我有3 <inputs type="number">。让我们称他们为a,b和c。默认情况下,a,b和c都是12。

我有一个输出,我们称之为d,显示a + b + c的总和。 d不应该超过36.如何设置a,b和c的“max”值使总和等于36。

一些例子:

a=12, b=12, c=12, d=36

这就是它的开始。要使等于13,用户必须将b或c减1,然后将1减1。

a=24, b=00, c=12, d=36

此方案显示用户将b减少12,然后将a减少12。

a=00, b=36, c=00, d=36

这一个节目他们使用减少a和c减少12,然后将b增加24。

a=12, b=12, c=00, d=24

用户将b减少了12个。用户可以按照他们的选择将a,b或c分为12。

我可以使用html和/或javascript来实现这一目标。

2 个答案:

答案 0 :(得分:0)

首先,您应该将a,b和c的最大值设置为36。

然后你需要使用onchange事件来确保在你更改它们时影响另一个事件。

例如:

如果a = 20,b = 10,c = 6,则d = 36

如果你增加c,使其为7,那么a应该变为19.5而b应该变为9.5

<强> HTML

<input type="number" id="a" max="36" value="12" onchange="Stabilized(this)" class="numbers">
<input type="number" id="b" max="36" value="12" onchange="Stabilized(this)" class="numbers">
<input type="number" id="c" max="36" value="12" onchange="Stabilized(this)" class="numbers">
<input type="number" id="d" max="36" value="36">

<强>的JavaScript

function Stabilized(e)
{
    var thisNumber = e.value;
    var totalSum=0;
    var i;
    var remainingSum = 36 - parseFloat(thisNumber);
    var numbersList = document.getElementsByClassName("numbers");
    var currentRemainingSum=0;
    var average;
    var y=0;
    var flag1=0;
    var counter=0;
    for (i=0;i<numbersList.length;i++)
    {
        totalSum +=parseFloat(numbersList[i].value);
        if(numbersList[i]!=e)
        {
            y++
            currentRemainingSum = parseFloat(currentRemainingSum) + (parseFloat(numbersList[i].value));
        }
    }
    if((parseFloat(currentRemainingSum))>(parseFloat(remainingSum)))
        {
            average = ((currentRemainingSum-remainingSum)/y);
            while(parseFloat(currentRemainingSum)>parseFloat(remainingSum)){
            for (i=0;i<numbersList.length;i++)
            {
                if(numbersList[i]!=e)
                {
                        if((parseFloat(numbersList[i].value))>=average){
                        numbersList[i].value = (parseFloat(numbersList[i].value) - parseFloat(average));
                        remainingSum=parseFloat(remainingSum)+parseFloat(average);
                        }
                        else
                        {
                            remainingSum=(parseFloat(remainingSum)+(parseFloat(numbersList[i].value)));
                            numbersList[i].value = 0;   
                        }

                }

                if((parseFloat(currentRemainingSum)<=parseFloat(remainingSum))){
                    break;
                    }
            }
        }
    }
    else if((parseFloat(currentRemainingSum))<(parseFloat(remainingSum)))
    {
        average = ((remainingSum-currentRemainingSum)/y)

        for (i=0;i<numbersList.length;i++)
        {

            if(numbersList[i]!=e)
            {
                counter++;
                if(numbersList[i].value==36)
                {
                     flag1++;
                }
                else
                {
                    numbersList[i].value = (parseFloat(numbersList[i].value) + average);
                    remainingSum = remainingSum - average;
                    flag1--;
                }

            }
            if((parseFloat(remainingSum))<=0 || (flag1==counter && numbersList.length==(i+1))){
                break;}
        }

    }
}

DEMO

答案 1 :(得分:0)

  I am giving you logic.arrange it according to yourself.

    function sol(){
    var a=0,b=0,c=0,n=36;
    a=Math.floor(Math.random()*n);
    if(a==n){
   b=0;
   c=0;
   exit;
   }
   b=Math.floor(Math.random()*n);

  if((a+b)>n){
    sol();
    }
  else if((a+b)==n)
    {
    c=0;
    }
  else
    c=n-(a+b);
    };
相关问题