我一直在尝试获取一个按钮,该按钮根据是否选中某个类的所有复选框来切换其值(从“全选”到“取消全选”)。这是我的带有复选框的简单表单的 HTML(嗯,PHP),您可以看到我正在使用 isset 检查以在发送表单后保留选中状态(“刷新”按钮):
<form id="contactFormFilters" name="contactFormFilters" class="form-horizontal" action="" method="post">
<label class="checkbox"><input type="checkbox" name="commentStatusCheckbox[]" class="commentStatusCheckbox" value="inbox" <?php if(isset($_POST['commentStatusCheckbox']) && is_array($_POST['commentStatusCheckbox']) && in_array('inbox', $_POST['commentStatusCheckbox'])) echo 'checked="checked"'; ?> />Inbox</label>
<label class="checkbox"><input type="checkbox" name="commentStatusCheckbox[]" class="commentStatusCheckbox" value="archive" <?php if(isset($_POST['commentStatusCheckbox']) && is_array($_POST['commentStatusCheckbox']) && in_array('archive', $_POST['commentStatusCheckbox'])) echo 'checked="checked"'; ?> />Archive</label>
<label class="checkbox"><input type="checkbox" name="commentStatusCheckbox[]" class="commentStatusCheckbox" value="trash" <?php if(isset($_POST['commentStatusCheckbox']) && is_array($_POST['commentStatusCheckbox']) && in_array('trash', $_POST['commentStatusCheckbox'])) echo 'checked="checked"'; ?> />Trash</label>
<input type="button" class="btn btn-success btn-mini" value="check all" id="checkAllCommentStatusCheckboxes" /><br /><br />
<button name="compares">Refresh</button>
</form>
这是我的 JS,用于根据是否选中所有复选框来更改按钮的值,它有效:
$(".commentStatusCheckbox").change(function(){
if ($('.commentStatusCheckbox:checked').length == $('.commentStatusCheckbox').length) {
$('#checkAllCommentStatusCheckboxes:button').val('uncheck all');
}else{
$('#checkAllCommentStatusCheckboxes:button').val('check all');
}});
这是我的 JS 用于切换选中全部/取消选中所有按钮,我使用的是在 StackOverflow 上找到的切换类(“toggleClick”),因为 jQuery 1.9.1 在使用切换来更改按钮的值时给我带来了麻烦。此片段也适用:
$.fn.toggleClick = function(){
var methods = arguments,
count = methods.length;
return this.each(function(i, item){
var index = 0;
$(item).click(function(){
return methods[index++ % count].apply(this,arguments);
});
});
};
$(function(){
$('#checkAllCommentStatusCheckboxes:button').toggleClick(function(){
$(this).val('uncheck all');
$('input.commentStatusCheckbox[type=checkbox]').prop('checked',true);
},function(){
$(this).val('check all');
$('input.commentStatusCheckbox[type=checkbox]').prop('checked',false);
})
})
这就是问题所在:这 2 个 JS 部分不能完美地协同工作,有时会导致按钮显示“取消选中所有”,而应该显示“全部选中”,反之亦然。这发生在我提交表单之后。例如,如果我选中所有 3 个复选框,那么按钮的值正确地“取消选中所有”,但是当我想要它时按下它并不会取消选中所有复选框(我必须按下它两次)。
我不确定是否需要对表单中按钮的值执行某种 PHP if/else?或者,整合(或重做)这些 JS 部分?
任何帮助是极大的赞赏!
谢谢....