Подтвердить что ты не робот

Ограничение флажка

У меня есть 20 флажков. Мне нужно отключить 16 флажков, если выбрано 4 флажка.

Я попробовал это с помощью этого кода jquery

    $("input[type=checkbox][name=cate]:checked").each(

    function()
    {
    }

);

Что мне нужно, если пользователь выбирает 4 флажка, тогда все остальные флажки должны быть отключены.

4b9b3361

Ответ 1

$("input[type=checkbox][name=cate]").click(function() {

    var bol = $("input[type=checkbox][name=cate]:checked").length >= 4;     
    $("input[type=checkbox][name=cate]").not(":checked").attr("disabled",bol);

});

демо

Ответ 2

Предоставление родительского элемента с идентификатором limit_checkbox поможет ускорить выбор, кеширование запроса уменьшает объем взаимодействия DOM, который медленный.

Используется "change" вместо щелчка, иначе код можно обойти, используя клавиатуру, а также использовать live вместо bind, что намного быстрее.

// Cache jQuery selection
var $checkboxes_to_limit = $("#limit_checkbox").find("input:checkbox[name=cate]");
$checkboxes_to_limit.live("change", function() {
    if($checkboxes_to_limit.filter(":checked").length >= 4) {
        $checkboxes_to_limit.not(":checked").attr("disabled","disabled");
    }
    else {
        $checkboxes_to_limit.removeAttr("disabled");
    }
});

Ответ 3

Вот рабочий пример. Может быть, это было бы полезно для некоторых людей, -)

$.fn.limit = function(n) {
 var self = this;
 this.click(function(){
   (self.filter(":checked").length==n)?
     self.not(":checked").attr("disabled",true).addClass("alt"):
     self.not(":checked").attr("disabled",false).removeClass("alt");
 });
}

$("input:checkbox").limit(3);

}

Ответ 4

Я нашел более гибкое решение, которое позволяет вам изменять предел для разных наборов флажков.

// Assign a class of limit_checkbox to the containing DIV and
// set a data-limit attribute with your limit. 
$(".limit_checkbox").on("change", function()
{
  var limit = $(this).attr('data-limit'),
      checkboxes = $(this).find("input:checkbox"),
      valid = checkboxes.filter(":checked").length >= limit;

    checkboxes.not(":checked").attr("disabled", valid);
});

Единственная проблема, которую я обнаружил, заключалась в том, что если ваша проверка не удалась и возвращает страницу со входом, она позволит пользователю выбрать один дополнительный флажок перед отключением остальных. Способ, которым я решил это, состоял в том, чтобы подсчитать, сколько из них было проверено и отключить остальные на сервере, прежде чем отправить страницу со входом назад.

надеюсь, что это поможет Cheers!

Ответ 5

Это не отключает остальные флажки, но не позволяет выбрать больше. Я все равно поделюсь, вот он:

.aspx

<asp:CheckBoxList id="chkList" runat="server" RepeatLayout="Flow" />

.js

$(document).ready(function () {
    LimitCheckboxes('input[name*=chkList]', 3);
}



function LimitCheckboxes(control, max) {

    $(control).live('click', function () {

        //Count the Total Selection in CheckBoxList 
        var totCount = 1;
        $(this).siblings().each(function () {
            if ($(this).attr("checked")) { totCount++; }
        });

        //if number of selected item is greater than the max, dont select.
        if (totCount > max) { return false; }
        return true;
    });

}

PS: Убедитесь, что вы используете RepeatLayout = "Flow", чтобы избавиться от раздражающего формата таблицы.

Ответ 6

Мое решение:

// Function to check and disable checkbox
    function limit_checked( element, size ) {
      var bol = $( element + ':checked').length >= size;
      $(element).not(':checked').attr('disabled',bol);
    }

    // List of checkbox groups to check + number of checked alowed
    var check_elements = [
      { id: '.group1 input[type=checkbox]', size: 2 },
      { id: '.group2 input[type=checkbox]', size: 3 },
    ];

    // Run function for each group in list
    $(check_elements).each( function(index, element) {
      // Limit checked on window load
      $(window).load( function() {
        limit_checked( element.id, element.size );
      })

      // Limit checked on click
      $(element.id).click(function() {
        limit_checked( element.id, element.size );
      });
    });