【フォーム】選択したチェックボックスのテキストを表示

選択肢のチェックボックスにチェックを入れると、その選択肢のテキストがページ上部に表示されます。選択肢が多数ある場合、何を選択したかわかりやすくなります。

選択する未選択

htmlのコードは下記になります。
選択ボタンの隣にspanタグを配置し「未選択」のテキストを入れておきます。チェックボックスが選択されたら選択肢のテキストをこのspanタグ内に表示していきます。

<div class="selectBtn"><a href="#">選択する</a><span class="selectTxt">未選択</span></div>
<div class="selectItem">
	<div><label><input type="checkbox" class="partsCheck"><span>日勤のみOK</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>夜勤のみ</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>2交替</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>3交替</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>シフト勤務</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>土・日・祝日休み</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>土・日休み</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>勤務時間・曜日相談可能</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>残業なし</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>残業少なめ(20時間未満)</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>残業多め(20時間以上)</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>扶養控除内(パートタイム)</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>週払い</span></label></div>
	<div><label><input type="checkbox" class="partsCheck"><span>シフト選べる</span></label></div>
</div>

続いてCSSのコードです。
選択ボタンのaタグと選択肢のテキストを表示するspanタグはフレックスボックスで横並びにします。その際、align-items: baselineを指定して高さを揃えないようにします。これはspanタグの高さが可変であるための対応です。また選択ボタンのaタグはflex-shrink: 0を指定して横幅を固定します。
選択肢のチェックボックスを格納するクラス名selectItemを付与したdivタグはdisplay: noneで非表示にします。選択肢は選択ボタンクリック時にアコーディオンで表示するためです。またチェックボックスはdisplay: noneで非表示にし、選択肢のテキストを内包するspanタグの疑似要素にチェックボックスの装飾をします。

.selectBtn {
	display: flex;
	align-items: baseline;
	margin: 0 0 1em;
}
.selectBtn a {
	display: inline-block;
	width: 100px;
	text-align: center;
	color: #333939;
	margin: 0 10px 0 0;
	padding: .5em;
	background: #efefef;
	border-radius: 3px;
	border: 1px #ccc solid;
	text-decoration: none;
	line-height: 1;
	box-sizing: border-box;
	flex-shrink: 0;
}
.selectTxt {
	display: inline-block;
}
.selectItem {
	display: none;
}
.selectItem div {
	margin: 0 0 .5em;
}
.selectItem div:last-child {
	margin: 0;
}
.partsCheck {
	display: none;
}
.partsCheck + span {
	display: inline-block;
	position: relative;
	padding-left: 25px;
}
.partsCheck + span:before {
	display: block;
	box-sizing: border-box;
	content: '';
	position: absolute;
	top: 50%;
	left: 0;
	margin-top: -10px;
	width: 17px;
	height: 17px;
	border: 2px solid #ccc;
	border-radius: 3px;
}
.partsCheck + span:hover:before {
	border-color: #0171bd;
}
.partsCheck:checked + span:after {
	display: block;
	box-sizing: border-box;
	content: '';
	position: absolute;
	top: 50%;
	left: 6px;
	margin-top: -7px;
	width: 5px;
	height: 9px;
	border-right: 2px solid #0171bd;
	border-bottom: 2px solid #0171bd;
	transform: rotate(45deg);
}

最後にjQueryのコードです。
選択ボタンのaタグをクリックした時の動作として、ボタンのテキスト変更と選択肢のアコーディオンでの表示・非表示の処理を記述します。
チェックボックス選択時の処理は、まず変数checksを配列で宣言します。そして選択されたチェックボックスの数だけ選択肢のテキストをpushを利用して変数checksに代入します。次に変数checksの配列の区切りをjoinを利用して全角の「、」に変換し、spanタグ内に選択肢のテキストを表示します。チェックボックスの選択が0の場合は、spanタグ内に「未選択」のテキストを表示します。

$(function() {
	$('.selectBtn a').click(function() {
		if($(this).html() == '選択する'){
			$(this).html('閉じる');
		}else{
			$(this).html('選択する');
		}
		$('.selectItem').slideToggle();
		return false;
	});
	$('.selectItem div label').click(function() {
		if($('.partsCheck:checked').length <= 0){
			$('.selectTxt').text('未選択');
		}else{
			var checks=[];
			$('.partsCheck:checked').each(function() {
				checks.push($(this).next().text());
			});
			$('.selectTxt').text(checks.join('、'));
		}
	});
});

タイトルとURLをコピーしました