使用JavaScript获取复选框中最小的值

时间:2017-03-14 13:04:46

标签: javascript checkboxlist

当我选择超过10个项目时,我想使用JavaScript获得最小的值。但我根据我的代码得不到结果。我认为错误在于“价格[i]”,但我不知道如何正确地写它。 这是我的代码。获得最小值的正确方法是什么?

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
    function getprice()
    {
        var total=0.00,i,count=0,min=0;

        for(i=0; i<document.frm1.item.length; i++)
        {
            if(document.frm1.item[i].checked)
                {
                    total=total+parseInt(document.frm1.item[i].value);
                    count=count+1;
                }
        }
        document.getElementById("totalprice").innerHTML="Total Price : RM "+ total.toFixed(2);
        document.getElementById("totalitem").innerHTML="Total item: "+count;


        if(total>=300 && count>=10)
        {
            for(i=0; i<document.frm1.item.length; i++)
            {
                if(document.frm1.item[i].checked)
                {
                    price[i]=document.frm1.item[i].value;

                    if(price[i]<min)
                        min=price[i];
                }
            }

            document.getElementById("smallestp").innerHTML="Smallest price : RM "+ min.toFixed(2);
        }
    }

</script>
</head>
<body>
<form name="frm1">

<input type="checkbox" name="item" value="100"/>Pan     RM 100</br>
<input type="checkbox" name="item" value="50"/>Fork     RM 50</br>
<input type="checkbox" name="item" value="200"/>Stove   RM 200</br>
<input type="checkbox" name="item" value="10"/>Pen      RM 10</br>
<input type="checkbox" name="item" value="60"/>Mouse    RM 60</br>
<input type="checkbox" name="item" value="40"/>Keyboard RM 40</br>
<input type="checkbox" name="item" value="30"/>Glue     RM 30</br>
<input type="checkbox" name="item" value="210"/>Speaker RM 210</br>
<input type="checkbox" name="item" value="300"/>Case    RM 300</br>
<input type="checkbox" name="item" value="80"/>Cable    RM 80</br>
<input type="checkbox" name="item" value="110"/>Extention   RM 110</br>
<input type="checkbox" name="item" value="400"/>Redmi   RM400</br>

<p><input type="button" name="subbtn" value="Send" onclick="getprice();"/></p><br/>

<p id="totalprice"></p>
<p id="totalitem"></p>
<p id="newupdatep"></p>
<p id="smallestp"></p>


</form>
</body>
</html>

2 个答案:

答案 0 :(得分:2)

这是您的代码更新。我改变了一些部分,使其更容易和更清晰。

选中复选框的所有值都存储在checkedValues数组

此代码正在使用Array#filter()Array#map()Array#reduce()math.min.apply

&#13;
&#13;
function getprice() {
  let checkedValues = Array.from(document.frm1.item).filter(i=>i.checked).map(i=>+i.value);

  let total = checkedValues.length === 0 ? 0 : checkedValues.reduce((a, b) =>a+b);
  document.getElementById("totalprice").innerHTML = "Total Price : RM " + total.toFixed(2);
  document.getElementById("totalitem").innerHTML = "Total item: " + checkedValues.length;

  if (total >= 300 && checkedValues.length >= 10) {
    let min = Math.min.apply(Math, checkedValues);
    document.getElementById("smallestp").innerHTML = "Smallest price : RM " + min.toFixed(2);
  }
}
&#13;
<form name="frm1">

  <input type="checkbox" name="item" value="100" />Pan RM 100<br>
  <input type="checkbox" name="item" value="50" />Fork RM 50<br>
  <input type="checkbox" name="item" value="200" />Stove RM 200<br>
  <input type="checkbox" name="item" value="10" />Pen RM 10<br>
  <input type="checkbox" name="item" value="60" />Mouse RM 60<br>
  <input type="checkbox" name="item" value="40" />Keyboard RM 40<br>
  <input type="checkbox" name="item" value="30" />Glue RM 30<br>
  <input type="checkbox" name="item" value="210" />Speaker RM 210<br>
  <input type="checkbox" name="item" value="300" />Case RM 300<br>
  <input type="checkbox" name="item" value="80" />Cable RM 80<br>
  <input type="checkbox" name="item" value="110" />Extention RM 110<br>
  <input type="checkbox" name="item" value="400" />Redmi RM400<br>

  <p><input type="button" name="subbtn" value="Send" onclick="getprice();" /></p><br/>

  <p id="totalprice"></p>
  <p id="totalitem"></p>
  <p id="newupdatep"></p>
  <p id="smallestp"></p>


</form>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

我已使用Array#filter过滤所有选中的复选框,然后将其与Array#map映射以获取每个已选中复选框的值。然后 - 使用Math.min.apply获取最低值。

function getprice() {
  var total = 0.00,
    i, count = 0,
    min = 0;

  for (i = 0; i < document.frm1.item.length; i++) {
    if (document.frm1.item[i].checked) {
      total = total + parseInt(document.frm1.item[i].value);
      count = count + 1;
    }
  }
  document.getElementById("totalprice").innerHTML = "Total Price : RM " + total.toFixed(2);
  document.getElementById("totalitem").innerHTML = "Total item: " + count;
  var checked = document.getElementsByName('item')

  if (total >= 300 && count >= 10) {
    var elems = Array.from(checked).filter(v => v.checked).map(c => Number(c.value));
    var cheapest = Math.min.apply([], elems);
    document.getElementById("smallestp").innerHTML = "Smallest price : RM " + cheapest.toFixed(2);
  }
}
<form name="frm1">

  <input type="checkbox" name="item" value="100" />Pan RM 100</br>
  <input type="checkbox" name="item" value="50" />Fork RM 50</br>
  <input type="checkbox" name="item" value="200" />Stove RM 200</br>
  <input type="checkbox" name="item" value="10" />Pen RM 10</br>
  <input type="checkbox" name="item" value="60" />Mouse RM 60</br>
  <input type="checkbox" name="item" value="40" />Keyboard RM 40</br>
  <input type="checkbox" name="item" value="30" />Glue RM 30</br>
  <input type="checkbox" name="item" value="210" />Speaker RM 210</br>
  <input type="checkbox" name="item" value="300" />Case RM 300</br>
  <input type="checkbox" name="item" value="80" />Cable RM 80</br>
  <input type="checkbox" name="item" value="110" />Extention RM 110</br>
  <input type="checkbox" name="item" value="400" />Redmi RM400</br>

  <p><input type="button" name="subbtn" value="Send" onclick="getprice();" /></p><br/>

  <p id="totalprice"></p>
  <p id="totalitem"></p>
  <p id="newupdatep"></p>
  <p id="smallestp"></p>
</form>