ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้
ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้


แนวทางควบคุม checkbox และ radio ผ่าน element อื่นๆ ด้วย jquery

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
checkbox jquery radio

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ checkbox jquery radio

ปัจจุบัน นักพัฒนาสามารถ ใช้ ChatGPT | Gemini | Claude | Perplexity | Deepseek ช่วยในการแก้ไขปัญหาต่างๆ ในการเขียนโปรแกรม หรือหาข้อมูลเพิ่มเติมได้ง่ายและสะดวก แนะนำให้ทุกคนใช้งานเพื่อพัฒนาศักยภาพของตัวเอง

ดูแล้ว 7,204 ครั้ง


เนื้อหาต่อไปนี้ จะเป็นแนวทางการใช้งาน checkbox และ radio ซึ่งเป็น element ส่วนหนึ่งของ form โดยเราจะมาดู
แนวทางการใช้งานร่วมกับ jquery ในรูปแบบต่างๆ
    ในที่นี้สมมติเรากำหนดชุดข้อมูล เป็นค่าตายตัว เป็นตัวแปร $arr_size แล้วจะทำการวนลูปเพื่อสร้างชุด checkbox
elemenet ที่มีค่าต่างๆ ตามโค้ดด้านล่าง
 
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <title>Document</title> 
    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css" >
</head>
<body>

<br>
<br>
<?php
$arr_size = array(
	"1"=>"Size XS",
	"2"=>"Size S",
	"3"=>"Size M",
	"4"=>"Size L",
	"5"=>"Size XL",
	"6"=>"Size XXL",					
);
?>
<div class="containe mx-auto" style="width:500px;">
<?php
foreach($arr_size as $k=>$v){ // วนลูปข้อมูล array ใช้งานค่า key และ value
?>
<input type="checkbox" name="chk_size" id="chk_size_<?=$k?>" value="<?=$k?>">
<label for="chk_size_<?=$k?>"><?=$v?></label>
<br>
<?php } ?>
</div>
 
<script src="https://unpkg.com/[email protected]/dist/jquery.min.js"></script>
<script type="text/javascript">
$(function(){

});
</script>
</body>
</html>



 
จากโค้ด เรากำหนด id สำหรับ input checkbox แต่ละตัว ด้วย chk_size_<?=$k?> ให้มีค่าเท่ากับ for ของ
label เพื่อให้ทั้งสอง element สัมพันธ์กัน โดยที่ เราสามารถเลือกที่กด check ที่ตัวข้อความแทนการกดที่ตัว checkbox
โดยตรงได้
 
เราสามารถกำหนด css class ให้กับ label เพื่อเปลี่ยน cursor ให้เป็นรูป มือ เพื่อให้ผู้ใช้สังเกตหรือเข้าใจได้ว่า สามารถ
กดเลือก checkbox ผ่านตัว label ได้
 
<style type="text/css">
.label_chk_size{ cursor:pointer; }
</style>
 
<label for="chk_size_<?=$k?>" class="label_chk_size"><?=$v?></label>
 
ต่อไป สมมติเราให้แต่ละ checkbox และ label อยู่ใน div อีกที จะได้เป็น
 
 
<style type="text/css">
.label_chk_size{	
	cursor:pointer; 
	background-color:#ffeae0;		
}
.chk_size_wrap{
	background-color:#f5d9cc;	
}
</style>
<?php
$arr_size = array(
	"1"=>"Size XS",
	"2"=>"Size S",
	"3"=>"Size M",
	"4"=>"Size L",
	"5"=>"Size XL",
	"6"=>"Size XXL",					
);
?>
<div class="containe mx-auto" style="width:500px;">
<?php
foreach($arr_size as $k=>$v){
?>
<div class="chk_size_wrap">
<input type="checkbox" name="chk_size" id="chk_size_<?=$k?>" value="<?=$k?>">
<label for="chk_size_<?=$k?>" class="label_chk_size"><?=$v?></label>
</div>
<?php } ?>
</div>



 
ผลลัพธ์ที่ได้ จะเห็นว่าตัว label จะมีขนาดความกว้าง ตามขนาดของข้อมูลที่แสดง ไม่เท่ากัน ในขณะที่ div
ที่เรานำมาคลุม นั้นจะกลางเท่ากันหมด
 
 
ต่อไปเราลองให้ checkbox อยู่ใน label และกำหนด style display ของ label เป็น block จะได้เป็น
 
<style type="text/css">
.label_chk_size{	
	cursor:pointer; 
	background-color:#ffeae0;	
	display:block;
}
.chk_size_wrap{
	background-color:#f5d9cc;	
}
</style>
<?php
$arr_size = array(
	"1"=>"Size XS",
	"2"=>"Size S",
	"3"=>"Size M",
	"4"=>"Size L",
	"5"=>"Size XL",
	"6"=>"Size XXL",					
);
?>
<div class="containe mx-auto" style="width:500px;">
<?php
foreach($arr_size as $k=>$v){
?>
<label for="chk_size_<?=$k?>" class="label_chk_size">
<input type="checkbox" name="chk_size" id="chk_size_<?=$k?>" value="<?=$k?>"> <?=$v?>
</label>
<?php } ?>
</div>


 
 
ตอนนี้ เราสามารถกดส่วนไหนของ label เพื่อเลือก checkbox ได้ง่ายขึ้น เพราะขนาดความกว้างของ label เท่ากัน
 
ต่อไปเราจะสร้างความแตกต่าง โดยกำหนด highlight ให้กับ label เมื่อเลื่อนเมาส์อยู่เหนือรายการใดๆ ด้วยการกำหนด 
css style ดังนี้
 
<style type="text/css">
.label_chk_size{	
	cursor:pointer; 
	background-color:#ffeae0;	
	display:block;
	margin-bottom:2px;
}
.label_chk_size:hover{	
	background-color:#f5d9cc;	
}
.chk_size_wrap{
	background-color:#f5d9cc;	
}
</style>
 
เมื่อเคลื่อนเมาส์เหนือ รายการ label ใดๆ ก็จะทำการ highlight ทำให้เราสังเกตถึงตัวเลือกที่กำลังจะเลือกได้ง่ายขึ้น
 
ทีนี้ ถ้าเราเลือกรายการใดๆ อยากให้ทำการ highlight รายการนั้นๆ ให้เด่นขึ้นมาอีก ส่วนนี้ เราจำเป็นต้องใช้งาน
jquery เข้ามาช่วย โดยแนวทางคือ เราจะสร้าง css class สำหรับกรณี label ที่มี checkbox ถูกติ้กเลือก แล้วจะใช้
jquery ในการตรวจสอบและกำหนดค่าการ highlight ตามเงื่อนไขการ checked
 
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <title>Document</title> 
    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css" >
</head>
<body>

<br>
<br>
<style type="text/css">
.label_chk_size{	
	cursor:pointer; 
	background-color:#ffeae0;	
	display:block;
	margin-bottom:2px;
}
.label_chk_size.is_checked,
.label_chk_size:hover.is_checked{	
	background-color:#fbbea1;	
}
.label_chk_size:hover{	
	background-color:#f5d9cc;	
}
.chk_size_wrap{
	background-color:#f5d9cc;	
}
</style>
<?php
$arr_size = array(
	"1"=>"Size XS",
	"2"=>"Size S",
	"3"=>"Size M",
	"4"=>"Size L",
	"5"=>"Size XL",
	"6"=>"Size XXL",					
);
?>
<div class="containe mx-auto" style="width:500px;">
<?php
foreach($arr_size as $k=>$v){
?>
<label for="chk_size_<?=$k?>" class="label_chk_size">
<input type="checkbox" name="chk_size" id="chk_size_<?=$k?>" value="<?=$k?>"> <?=$v?>
</label>
<?php } ?>
</div>
 
<script src="https://unpkg.com/[email protected]/dist/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
     $(".label_chk_size").on("click",function(){
		 $(this).has(":checkbox:checked").addClass("is_checked");
		 $(this).has(":checkbox:not(:checked)").removeClass("is_checked");
	 });
});
</script>
</body>
</html>


 
 
เราสามารถซ่อน input checkbox โดยกำหนด css เพิ่มเติมเป็นดังนี้
 
.label_chk_size input{	
	visibility:hidden;
}
 
เราสามารถประยุกต์เพิ่มเติมกับ font-awesome เพื่อใช้งาน icon check | check-square | check-circle
โดย icon จะแสดงชัดขึ้นเมื่อรายการนั้นถูกเลือก แนวทางคือ ให้เราเพิ่ม
 
<i class="far fa-check-square"></i>
 
แทรกเข้าไปต่อจาก input checkbox
 
จะได้เป็น
 
<div class="containe mx-auto" style="width:500px;">
<?php
foreach($arr_size as $k=>$v){
?>
<label for="chk_size_<?=$k?>" class="label_chk_size">
<input type="checkbox" name="chk_size" id="chk_size_<?=$k?>" value="<?=$k?>"> 
<i class="far fa-check-square"></i>
<?=$v?>
</label>
<?php } ?>
</div>
 
ปรับส่วนของ jquery 
 
<script type="text/javascript">
$(function(){
     $(".label_chk_size").on("click",function(){
		 $(this).has(":checkbox:checked").addClass("is_checked").find("i").addClass("fas");
		 $(this).has(":checkbox:not(:checked)").removeClass("is_checked").find("i").removeClass("fas");;
	 });
});
</script>
โค้ดทั้งหมด

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <title>Document</title> 
    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css" >
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.7/css/all.css">
</head>
<body>

<br>
<br>
<style type="text/css">
.label_chk_size{	
	cursor:pointer; 
	background-color:#ffeae0;	
	display:block;
	margin-bottom:2px;
}
.label_chk_size.is_checked,
.label_chk_size:hover.is_checked{	
	background-color:#fbbea1;	
}
.label_chk_size:hover{	
	background-color:#f5d9cc;	
}
.label_chk_size input{	
	visibility:hidden;
}
.chk_size_wrap{
	background-color:#f5d9cc;	
}
</style>
<?php
$arr_size = array(
	"1"=>"Size XS",
	"2"=>"Size S",
	"3"=>"Size M",
	"4"=>"Size L",
	"5"=>"Size XL",
	"6"=>"Size XXL",					
);
?>
<div class="containe mx-auto" style="width:500px;">
<?php
foreach($arr_size as $k=>$v){
?>
<label for="chk_size_<?=$k?>" class="label_chk_size">
<input type="checkbox" name="chk_size" id="chk_size_<?=$k?>" value="<?=$k?>"> 
<i class="far fa-check-square"></i>
<?=$v?>
</label>
<?php } ?>
</div>
 
<script src="https://unpkg.com/[email protected]/dist/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
     $(".label_chk_size").on("click",function(){
		 $(this).has(":checkbox:checked").addClass("is_checked").find("i").addClass("fas");
		 $(this).has(":checkbox:not(:checked)").removeClass("is_checked").find("i").removeClass("fas");;
	 });
});
</script>
</body>
</html>






 
สังเกตว่า ใน font-awesome css class ที่ชื่อ fas จะเป็นตัวพื้นหลังเข็ม ส่วน far จะเป็นตัวพื้นหลังจาง รูปแบบการ
ทำงาน ให้หา i ที่อยู่ใน label แล้วเปลี่ยน icon เป็นพื้นหลังเข็มใน checkbox ที่ถูกเลือก และเปลี่ยน icon เป็นตัว
พื้นจาง เมื่อ checkbox ยกเลิกการเลือก
 















URL สำหรับอ้างอิง








เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ