JavaScript或jQuery检查前20个复选框,然后是20,依此类推

时间:2012-02-17 14:22:20

标签: javascript jquery checkbox

是否可以使用JavaScript或jQuery来执行上述操作?

我正在为每个人想象一个链接,例如:

<a href=#>Check 1-20</a>
<a href=#>Check 21-40</a>
<a href=#>Check 41-60</a>

依旧......

虽然我的复选框是用PHP动态生成的(我有很多):

<input type="checkbox" class="checkbox" name="select[]" value="5153"/>
<input type="checkbox" class="checkbox" name="select[]" value="5154"/>
<input type="checkbox" class="checkbox" name="select[]" value="5155"/>

如果有任何想法或最好的方法来解决这个问题,我们将不胜感激:)

7 个答案:

答案 0 :(得分:4)

  

是否可以使用JavaScript或jQuery来执行上述操作?

是。有很多方法可以做到这一点。如果你能在jQuery中做到这一点,你可以用“普通”JavaScript来实现,因为jQuery是用JavaScript编写的。

这是一种方式:

$(document).ready(function() {
   var $cbs = $('input:checkbox[name="select[]"]'),
       $links = $("a"); // you probably don't want _all_ links,
                        // so add a class or something.
   $links.click(function() {
      var start = $links.index(this) * 20,
          end = start + 20;
      $cbs.slice(start,end).prop("checked",true);
   });
});

演示:http://jsfiddle.net/nnnnnn/Q6SxW/

这将获取所单击的特定链接的索引,并使用它来确定要检查的复选框的范围,然后检查这些复选框...

答案 1 :(得分:1)

有很多方法可以做到这一点。

使用您当前的HTML,最好的方法是迭代元素,然后单独选择它们;

function select(start, end) {
    for (var i=start;i<end;i++) {
        $('.checkbox[value="' + i + '"]').prop('checked', true);
    }
}

如果您可以为每个元素添加唯一ID,那么 会更高效(请注意,在HTML5之前,您无法使用数字启动ID,因此您可能需要在它前面加上一些东西;

function select(start, end) {
    for (var i=start;i<end;i++) {
        document.getElementById("prefix_" + i).checked = true;
    }
}

就如何动态匹配<a href=#>Check 1-20</a>select(1,20)而言,最好的方法是在超链接中添加公共类,并使用data属性设置最小值和最大值;

<a href="#" class="highlight" data-min="1" data-max="20">Check 1-20</a>

然后:

$(document).on('click', '.highlight', function (e) {
    event.preventDefault();

    var self = $(this);

    select(self.data('min'), self.data('max'));
});

如果需要,您还可以手动解析超链接的文本(并避免使用data属性;

$(document).on('click', 'a', function (e) {
    event.preventDefault();

    var values = $(this).text().match(/ (\d+)-(\d+)/);

    select(parseInt(values[1], 10), parseInt(values[2], 10));
});

答案 2 :(得分:1)

此JQUERY代码将以简单的方式为您完成。

$('[name="select[]"]').slice(start,end).prop("checked",true);

<强>实施例

只需使用此功能..   如果您想先检查20 ,那么

$('[name="select[]"]').slice(0,20).prop("checked",true);

如果您要选中30到40复选框,请使用

$('[name="select[]"]').slice(30,40).prop("checked",true);

答案 3 :(得分:0)

不需要循环,只需使用以下内容,其中X是起始索引,Y是结束索引。

 $('input[name='select[]']:gt(X):lt(Y)').attr("checked", true); 

 $('input[name='select[]']:gt(0):lt(20)').attr("checked", true);

将其转换为与Rory的帖子类似的功能,它将是动态的(没有循环)。

答案 4 :(得分:0)

你可以这样做..

<a href=# rel="1-20">Check 1-20</a>
<a href=# rel="21-40">Check 21-40</a>
<a href=# rel="41-60">Check 41-60</a>

我已将rel属性添加到您的链接中,我将使用它来查找元素。

附加点击事件:

$('#id_of_element_where_links_are a').click(function(){
    var rel = $(this).attr('rel').split('-');
    var start = parseInt(rel[0])-1;
    var end = parseInt(rel[1]);
     //i have start and end element now
     $('input[type="checkbox"]:eq('+start+')').attr('checked', 'checked');
    var ellementTill = $('input[type="checkbox"]:eq('+end+')');
    //now when I have end element I will check all from start to end
    $('input[type="checkbox"]:eq('+start+')').nextUntil(elementTill, "input").attr('checked','checked');

});

所以我做了什么,我已经将rel属性添加到链接,然后用它们来获取范围:例如1-20是从1到20.结束我从1减少了因为元素从0开始索引。然后我搜索了end元素并检查了所有元素直到end元素。不会检查结束元素,这是我没有减少20的原因。

答案 5 :(得分:0)

你可以试试这个:

$('a').click(function() {
    $('.checkbox:gt(' + ($(this).index() * 20) + '):lt(' + (($(this).index() * 20) +21) + ')').attr('checked', 'checked');
});

有了这个:

<a href="#">Check 1-20</a>
<a href="#">Check 21-40</a>
<a href="#">Check 41-60</a>



<input type="checkbox" class="checkbox" name="select[]" value="5153"/>
<input type="checkbox" class="checkbox" name="select[]" value="5154"/>
<input type="checkbox" class="checkbox" name="select[]" value="5155"/>

答案 6 :(得分:0)

我认为这也会奏效:

function checkOptions(from, to){
    var checksArray = $(".checkbox input[type=checkbox]");

    for(var i = from; i < to; i++){
        $(checksArray[i]).attr("checked", true);
    }

    return;
}