取消选中复选框之一时,取消选中“全部选中”复选框

乔治

我已经完成了这个小型项目。我的问题是全选复选框。检查所有复选框效果很好,但是如果我从tbody中取消选中1个复选框,则checkall复选框仍处于被检查的状态。

下面是我的代码。

需要指出的是,这是我的checkall和uncheckall复选框。也可以在代码段中找到。

$('#checkAll').click(function(){
    $(':checkbox').prop('checked', this.checked);
});

$('.cb').each(function(index){
    $(this).on("change", function(index) {
        if (!this.checked) {
            $("#checkAll").prop('checked', false);
            return;
        }
    });
})

var tasks = [];
var count = 1000;

$('document').ready(function(){
	
	toggleRemoveAndMarkButtons();

	$('#add').click(function() {
		var desc 	= $.trim($('#list-input').val());

		if (!desc) {
			item.id = "";
			alert("Input a description");
			return;
		}

		var status  = $('#task-status').val();
		item 		= {};

		item.description = desc;
		item.status 	 = status;
		for(i = 0 ; i < tasks.length; i++)  {
			if(tasks[i].description.toUpperCase() == desc.toUpperCase()) {
				alert('Task description is already on the list. Please input new task description!')
				return;
			}
		}
		var id	= count++;
		item.id	= id;
		tasks.push(item);

		var row  = "'<tr id="+ item.id +" class='row'>'";
			row += "<td><input type='checkbox' class='cb' /></td>";
			row += "<td> #" + item.id + "</td>";
			row += "<td>" + item.description.toUpperCase() + "</td>";
			row += "'<td class="+ item.id +">" + item.status + "</td>";
			
		$("#mylist tbody").append(row);


		//clear input field
		$('#list-input').val('');
		$('#list-input').focus();
	});

	//remove list function
	$('#delete').on('click', function() {
        if (confirm("Are you sure to delete selected task(s)?")){
        	$(':checkbox:checked').each(function(){
        		var rowId = $(':checkbox:checked').parents('tr').attr('id');
        		var row   = $('tr#' + rowId);
        		for(i=0; i < tasks.length; i++){
        			if(tasks[i].id == rowId){
        				tasks.splice(i, 1);
        				break;
        			}
        		}
        		row.remove();
        	})
        }
        uncheckAfterActionClick();
        toggleRemoveAndMarkButtons();
    })

    $('#update').on('click', function() {
    	if(confirm("Are you sure to Mark these as COMPLETE?")){
			var taskRow = $("#mylist tbody tr");

			$.each(taskRow, function(i, row) {
		    	if( $(this).find('td').eq(0).find("input").is(":checked") ) {
		        	$(this).find('td').eq(3).text("Complete");
		        	tasks[i].status = "Complete";
		        	$(this).addClass('complete');             
		    	}
			});
			$('tr')
    	}
    	uncheckAfterActionClick();
        toggleRemoveAndMarkButtons();
    })

    //check all
    $('#checkAll').click(function(){
	    $(':checkbox').prop('checked', this.checked);
	});

	$('.cb').each(function(index){
		$(this).on("change", function(index) {
		    if (!this.checked) {
		        $("#checkAll").prop('checked', false);
		        return;
		    }
		});
	})

})


function toggleRemoveAndMarkButtons() {
	var howManyChecked = $('.cb:checked, .checkAll:checked').length;
	var disableButtons = howManyChecked == 0;
	$('#delete, #update').prop('disabled', disableButtons);
}

function uncheckAfterActionClick() {
	$('.cb, #checkAll').prop('checked', false);
    toggleRemoveAndMarkButtons();
}

//container style
$('.container').css({
	"width":"640px",
	"margin":"0 auto", 
	"text-align":"center"
});

$('#list-input').attr({'placeholder':"Input task description"});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
		<input id="list-input" />
		<input id="task-status" value="New" type="hidden"/>
		<button id="add">Add To List</button>
		<button id="delete" class="delete" disabled>Remove From List</button>
		<button id="update" disabled>Mark as Complete</button>
	</div>
	<div class="container">
		<h1>Your Task</h1>
		
		<div>
			<table id="mylist">
				<thead>
					<tr>
						<th><input type="checkbox" id="checkAll" onchange="toggleRemoveAndMarkButtons()"/></th>
						<th>Task Number</th>
						<th>Description</th>
						<th>Status</th>
					</tr>
				</thead>
				<tbody>
				</tbody>
			</table>
		</div>
	</div>

乔恩·乌里斯

您的jQuery中有一个错字:

$('this').on("change", function(index) {

'this'在选择器中搜索的是字符串,而不是使用jQuery的contextual $(this)

而且这行不起作用:

if (!this.checked) {

而是使用.not()选择器:

if ($(this).not(':checked')) {

最后,用于设置change每个复选框事件的代码仅在准备就绪的文档上运行-因此,它试图在.cb元素存在之前绑定它们。这是一个解决方法:

更改此:

$('.cb').each(function(index) {
    $(this).on("change", function(index) {
        if (!this.checked) {
            $("#checkAll").prop('checked', false);
            return;
        }
    });
})

对此:

$(document).on('change', '.cb', function() {
  if ($(this).not(':checked')) {
    $("#checkAll").prop('checked', false);
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

取消选中“全部选中”复选框

来自分类Dev

当其他复选框之一未选中时,取消选中全选复选框

来自分类Dev

取消选中子项之一时取消选中所有复选框的问题

来自分类Dev

取消选中复选框

来自分类Dev

自动选中/取消选中“全部”复选框

来自分类Dev

全部选中或取消选中多个复选框

来自分类Dev

如何使用复选框创建“全部选中/取消选中”?

来自分类Dev

选中和取消选中复选框

来自分类Dev

选中并取消选中动态复选框

来自分类Dev

选中和取消选中复选框

来自分类Dev

无法选中/取消选中复选框

来自分类Dev

选中/取消选中复选框jQuery

来自分类Dev

选中和取消选中复选框

来自分类Dev

选中/取消选中无复选框

来自分类Dev

无法选中/取消选中复选框

来自分类Dev

选中或取消选中复选框时如何显示吐司?

来自分类Dev

在选中和取消选中复选框时传递参数

来自分类Dev

选中/取消选中复选框时更改禁用/启用

来自分类Dev

Listview 在行单击时选中/取消选中复选框

来自分类Dev

是否为一组任务添加“全部选中/全部取消选中”复选框?

来自分类Dev

选中/取消选中其他复选框时,SelectAll复选框无法正常运行

来自分类Dev

在jQuery中选择主复选框时选中/取消选中复选框

来自分类Dev

选中或取消选中复选框时,更改复选框的值

来自分类Dev

R闪亮的取消选中复选框

来自分类Dev

jQuery按钮取消选中复选框

来自分类Dev

使用Jquery取消选中复选框

来自分类Dev

取消选中复选框并显示div

来自分类Dev

jQuery-取消选中复选框

来自分类Dev

取消选中始终复选框