html checkbox 實現全選/取消全選效果


在前端開發的過程中,特別是數據表格的處理,我們經常碰到checkbox全選與取消以及動態的根據子類的選中狀態確定全選checkbox是否“checked”

全選與取消全選

<html>
<body>
 
	<table border="1">
		<tr>
			<th><input type="checkbox" onclick="swapCheck()" /></th>
			<th>Month</th>
			<th>Savings</th>
		</tr>
		<tr>
			<td><input type="checkbox" /></td>
			<td>January</td>
			<td>$100</td>
		</tr>
		<tr>
			<td><input type="checkbox" /></td>
			<td>February</td>
			<td>$150</td>
		</tr>
	</table>
 
	<script type="text/javascript"
		src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
 
	<script type="text/javascript">
		//checkbox 全選/取消全選
		var isCheckAll = false;
		function swapCheck() {
			if (isCheckAll) {
				$("input[type='checkbox']").each(function() {
					this.checked = false;
				});
				isCheckAll = false;
			} else {
				$("input[type='checkbox']").each(function() {
					this.checked = true;
				});
				isCheckAll = true;
			}
		}
	</script>
       //優化版本
     <script type="text/javascript">
		var isCheckAll = false;
		function swapCheck() {
			$("input[type='checkbox']").each(function() {
				this.checked = !isCheckAll;
			});
		    isCheckAll = !isCheckAll;
		}

	</script>
</body>
</html>

還要滿足兩個常用場景:

當然我們實現這個功能還是不夠的,考慮以下2個常用場景,

場景1:如果用戶在全選完之后,把部分行數據“取消”了選中;
場景2:用戶通過手動點擊行內的checkbox最終實現了“全選”的狀態

通過前端實現

js代碼:

<script type="text/javascript">
	function listenCheckbox(){
        $("tr td input[type='checkbox']").on('change',function(){
            //總量
            var total=$("tr td input[type='checkbox']").length;
            ////實際被選中的
            var exact=$("tr td input[type='checkbox']:checked").length;
            ////檢測所有的check選項的有多少與總量進行對比
            $("tr th input[type='checkbox']")[0].checked=(total==exact); //true or false
        })
		}
	listenCheckbox()
</script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM