您好我有11行,每行有3个复选框和1个复选框,用于检查所有行或取消选中所有行复选框。我还有一个常规复选框,用于检查/取消选中所有行的所有复选框。我有第一行复选框的问题,它没有检查,它第一次检查所有3个复选框,但没有得到检查,之后没有任何改变。所有其他复选框工作正常。另一件事情是,如果选中常规复选框,那么第一行的第一个复选框在检查/取消选中时有效,但是当其他行的复选框是checke / unchecked时,会反映出第一个复选框的变化,它会被选中/取消选中:< / p>
id="selectall">
{% for group, privs in privileges %}
<div class="well well-sm priv-panel"><span class="has-success">{{ group }}</span>
{% for p in privs %}
<span class="priv {% if p.ACTIVE %}priv-active{% else %}priv-inactive{% endif %}">
<input type="checkbox" class="checkbox1 checkbox1_{{ group }}"
name="privs[{{ p.PRIVILEGE_ID }}]" id="{{ p.PRIVILEGE_NAME }}"
{% if p.ACTIVE %}checked{% endif %}/>
<label for="{{ p.PRIVILEGE_NAME }}">{{ p.PRIVILEGE_FRIENDLY_NAME }}</label></span>
{% endfor %}
<input style="float:right;" type="checkbox" class="priv_group_toggle_cb"
value="{{ group }}">
</div>
{% endfor %}
$("#selectall, .priv_group_toggle_cb").on('change', function () {
var $this = $(this);
var checked = $this.is(':checked');
var cb = null;
if ($this.hasClass('priv_group_toggle_cb')) {
cb = $("[name*=privs]", $this.parent());
} else {
cb = $("[name*=privs], .priv_group_toggle_cb");
}
cb.each(function (idx, val) {
if (val.checked !== checked) {
val.checked = checked;
$(val).trigger('change');
}
});
});
$(".table-cb-toggle tr").on('click', function () {
$(this).find("input[type=checkbox]").click();
});
$(".priv-panel input[type=checkbox]").on('change', function () {
var parent = $(this).parent().toggleClass('priv-active priv-inactive');
var div = parent.parent();
var cb = div.find("input[type=checkbox]:not(.priv_group_toggle_cb)");
var count = cb.length;
var checked_cnt = Array.prototype.slice.call(cb).reduce(function (c, i) {
return c + (i.checked + 0)
}, 0);
div.find(".priv_group_toggle_cb")[0].checked = checked_cnt == count;
});
$(".mytable tr td input[type=checkbox]").on('change', function () {
$(this).next("i").toggleClass('fa fa-check-square-o fa fa-square-o');
});