一个复选框检查其他人

时间:2017-05-13 20:03:26

标签: javascript jquery dom checkbox

我希望有一个复选框可以检查所有其他人,但我被卡住了。我试图通过循环来做到这一点,但什么都不返回。

这是一个练习,所以我无法更改html ID。

HTML:

       <p>
        Price for adds: <span id="price">0 usd</span>
    </p>
</div>

<div class='panel'>
    <div class='panel-body'>
        <form>
            <div class="checkbox">
                <label><input type="checkbox">All adds</label>
            </div>
            <div class="checkbox">
                <label><input type="checkbox" data-price="3.50">Additional cheese, 3,50 USD</label>
            </div>
            <div class="checkbox">
                <label><input type="checkbox" data-price="2.20">Salami, 2,20 USD</label>
            </div>
            <div class="checkbox">
                <label><input type="checkbox" data-price="5.00">Additional Ham, 5 USD</label>
            </div>
            <div class="checkbox">
                <label><input type="checkbox" data-price="4.10">pepper, 4,10 USD</label>
            </div>
            <div class="checkbox">
                <label><input type="checkbox" data-price="3.50">Mushroms, 3,50 USD</label>
            </div>
            <div class="checkbox">
                <label><input type="checkbox">Clear all</label>
            </div>
            <br>
            <p>
                <button class='btn btn-primary'>Submit</button>
            </p>
        </form>
    </div>
</div>

JS:

$(function(){

        $('.panel-body').on('change','input',function(e){


           if($(this).parent().text()=='All adds'){
                var inps = $('.checkbox input');

                    $(inps).each(function{
                        $(this).prop('checked', true)
                    })


                var price = $('#price').html()
                price = price.replace("USD", "");
                price = parseFloat(price)
                var add = $(this).attr('data-price')

                if ($(this).prop('checked')) {
                    console.log($(this).text())
                    var totalPrice = parseFloat(add) + parseFloat(price)

                    $('#price').html(totalPrice.toFixed(2))
                }
                else {
                    var totalPrice =  parseFloat(price) - parseFloat(add)
                    $('#price').html(totalPrice.toFixed(2))
                }
        })


})

3 个答案:

答案 0 :(得分:0)

你有一个错字:

$(inps).each(function{
                        $(this).prop('checked', true)
                    })  

你应该改变这个:
$(inps).each(function{

对此:
$(inps).each(function(){

答案 1 :(得分:0)

首先你在功能后缺少()

  $(inps).each(function() {
    $(this).prop('checked', true)
  })

第二次使用trim()删除双方$(this).parent().text().trim()

的空格

你所拥有的if已被)}关闭,这是错误的,只需使用)

4而不是使用each,您可以$('.checkbox input').prop('checked', true)

  if ($(this).prop('checked')) {
    $('.checkbox input').prop('checked', true)
  } else {
    $('.checkbox input').prop('checked', false)
  }

这允许您取消选中所有内容。

&#13;
&#13;
$(function() {

  $('.panel-body').on('change', 'input', function(e) {

    if ($(this).parent().text().trim() == 'All adds') {

      if ($(this).prop('checked')) {
        $('.checkbox input').prop('checked', true)
      } else {
        $('.checkbox input').prop('checked', false)
      }

      var price = $('#price').html()
      price = price.replace("USD", "");
      price = parseFloat(price)
      var add = $(this).attr('data-price')

      if ($(this).prop('checked')) {
        console.log($(this).text())
        var totalPrice = parseFloat(add) + parseFloat(price)

        $('#price').html(totalPrice.toFixed(2))
      } else {
        var totalPrice = parseFloat(price) - parseFloat(add)
        $('#price').html(totalPrice.toFixed(2))
      }
    }

  })
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <p>
    Price for adds: <span id="price">0 usd</span>
  </p>
</div>

<div class='panel'>
  <div class='panel-body'>
    <form>
      <div class="checkbox">
        <label>
          <input type="checkbox">All adds</label>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox" data-price="3.50">Additional cheese, 3,50 USD</label>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox" data-price="2.20">Salami, 2,20 USD</label>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox" data-price="5.00">Additional Ham, 5 USD</label>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox" data-price="4.10">pepper, 4,10 USD</label>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox" data-price="3.50">Mushroms, 3,50 USD</label>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox">Clear all</label>
      </div>
      <br>
      <p>
        <button class='btn btn-primary'>Submit</button>
      </p>
    </form>
  </div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

将主复选框设为ID“cAll”。并使用jQuery:

    $("#cAll").click(function(){
        $('input:checkbox').not(this).prop('checked', this.checked);
    });