如何通过使用jQuery测试其高值和低值来检查复选框?

时间:2015-05-07 18:59:14

标签: jquery checkbox

我在根据其值测试和检查一组复选框时遇到问题。下面的示例显示了一些复选框,其中如果复选框的值高于选中的值,则应检查。如果该值等于或低于检查的值,则不应检查。

我感谢帮助人员!

<label class="checkbox"><input type="checkbox" name="a" value="5"> One</label>
<label class="checkbox"><input type="checkbox" name="a" value="5"> two</label>
<label class="checkbox"><input type="checkbox" name="a" value="15"> three</label>
<label class="checkbox"><input type="checkbox" name="a" value="25"> four</label>

JS

$('input[type="checkbox"]').change(function (e) {

            var $value = $(this).val();
            var $siblings = $('input[name="' + $(this).attr("name") + '"]').not(":checked");

            $.each($siblings, function (i, input) {

                console.log(input.value)


                if ($value != input.value) {
                    $(this).prop('checked', true);
                }
                else if ($value > input.value) {
                    $(this).prop('checked', true);
                }
                else if ($value >= input.value) {
                    $(this).prop('checked', true);
                }
                else {
                    $(this).prop("checked", false);
                }

            })
        });

7 个答案:

答案 0 :(得分:1)

你可以做到

http://jsfiddle.net/6kkchbor/

$('input[type="checkbox"]').change(function (e) {

    var $value = parseInt($(this).val());
    var $siblings = $('input[name="' + $(this).attr("name") + '"]:checked').not($(this));
    var isCheck = true;

    $siblings.each(function (i) {
        var a = $(this).val() || 0;

        if ($value <= a) {
            isCheck = false;
        }
    });

    $(this).prop("checked", isCheck);
});

$('input[name="' + $(this).attr("name") + '"]:checked').not($(this))抓取复选框,不包括您点击的内容。

each()循环只是设置检查标志,然后根据结果设置单击框以进行检查。这也允许您取消选中点击的框

答案 1 :(得分:1)

试试这个;

$("input[type='checkbox']").change(function (e) {
    if (!$(this).is(":checked")) return;

    var siblings = $("input[name='" + $(this).attr("name") + "']");
    var value = parseInt($(this).val());
    var elements  = $("input[name='" + $(this).attr("name") + "']:not(:checked)");

    $.each(elements, function (index, element) {
        if (value > parseInt($(element).val())) {
            $(element).prop('checked', true);
        }
        else {
            $(element).prop("checked", false);
        }
    })
});

这里还有一个JSFiddle link

答案 2 :(得分:0)

你可以这样尝试

    var firstCheckboxVal = 0;
    $('input[type="checkbox"]').change(function (e) {

        if(firstCheckboxVal == 0) 
            firstCheckboxVal = $(this).val();
        else {
            if(parseInt($(this).val()) > parseInt(firstCheckboxVal)) 
                $(this).prop('checked', true);
            else
                $(this).prop('checked', false);
        }
    });

我不确定,但我认为它适合你。

答案 3 :(得分:0)

试试这个JSFIDDLE

我遇到的问题是值是字符串而不是int,所以我只是用parseInt来修复这两个级别。

$('input[type="checkbox"]').click(function (e) {

    var $value = parseInt($(this).val());
    var $siblings = $('input[name="' + $(this).attr("name") + '"]').not(":checked");

    $.each($siblings, function (i, input) {
         var _this = parseInt(input.value);
         if(_this > $value){
             input.checked = true;
         }
    })
});

答案 4 :(得分:0)

JSFIDDLE https://jsfiddle.net/seadonk/7wcs5sah/

此示例将检查所有复选框,其值大于或等于选中复选框时复选框的值。 如果取消选中,则所有值大于它的框都将保持选中状态,并且所有值均小于它的框都将被取消选中。

如果您在同一个父容器中拥有它们,则可以使用.siblings()函数迭代所有同级复选框元素。

复选框值以字符串形式返回,因此我使用parseInt()将它们转换为数字,然后再将它们进行比较。

$(function () {
    $('input[type="checkbox"]').change(function (e) {
        var checked = $(this).is(":checked");
        var checkedValue = $(this).val();
        var siblings = $('input[type=checkbox]');

        siblings.each(function () {
            var siblingValue = parseInt($(this).val());
            //if checked, then check all boxes with values > checkedValue
            //if unchecked, then uncheck all boxes with values <= checkedValue
            $(this).prop('checked', 
                         (checked && (siblingValue >= checkedValue)) || 
                         (!checked && (siblingValue > checkedValue)));
        });
    });
});

答案 5 :(得分:0)

这应该这样做。首先查找已检查的最高值,然后取消选中此值是否小于或等于当前复选框。

请记住,.val()会返回集合中第一个的值,因此会进行排序。

$(':checkbox[name=a]').on('change', function() {
  var max = +$(':checkbox[name=a]:checked').not(this).sort(function(a,b) {
    return +b.value - +a.value;
  }).val();
  if( +this.value <= max ) {
     this.checked = false;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<label class="checkbox"><input type="checkbox" name="a" value="5"> One</label>
<label class="checkbox"><input type="checkbox" name="a" value="5"> two</label>
<label class="checkbox"><input type="checkbox" name="a" value="15"> three</label>
<label class="checkbox"><input type="checkbox" name="a" value="25"> four</label>

答案 6 :(得分:0)

我不是你的jQuery的粉丝,因为它与html紧密耦合。我的答案是将你的复选框分开(基于Philip Walton @ Google - Decoupling your Html, Css and Javascript

HTML

<div class="js-checker-group">
<label class="checkbox"
  <input class="js-checker-item" type="checkbox" name="a" value="5">
  One
</label>
<label class="checkbox">
  <input class="js-checker-item" type="checkbox" name="a" value="5">
  two
</label> 
<label class="checkbox">
  <input class="js-checker-item" type="checkbox" name="a" value="15">
  three
</label>
<label class="checkbox">
  <input class="js-checker-item" type="checkbox" name="a" value="25">
  four
</label>
</div>

jQuery的:

$('.js-checker-group input[type="checkbox"].js-checker-item')
  .change(function (e) 
{
  var $this = $(this);
  var $group = $this.closest('.js-checker-group');
  var thisValue = parseInt($this.val());
  if ($group.length == 1
     && $this.prop('checked')
     && !isNaN(thisValue)) 
  {
    $group.find('input[type="checkbox"].js-checker-item')
      .each(function()
    {
      var $other = $(this);
      var otherValue = parseInt($other.val());
      if (!isNaN(otherValue) && !$this.is($other))
      {
        var isGreater = otherValue < thisValue;
        $other.prop('checked', isGreater);
      }
    });
  }
});

我会劝阻你写javascript,这取决于你如何用兄弟姐妹,父母等编写你的html的结果。一个改变可能导致你的javascript根本不起作用。

JsFiddle Example