tableのtd内にあるcheckboxのクリック範囲を拡大させ、チェック時に親要素であるtdにCSSを割り当てる方法
tableのtd内にcheckboxを設置し、td部分をクリックすることでcheckboxにチェックを入れたい。つまり「checkboxのクリック可能範囲=親要素のtd部分全て」としたい。さらにチェック状況により親要素のtdに対してCSSを割り当てたい。以下にソースコードとサンプルをメモ。
サンプル
https://taitan916.info/sample/table_td_checkbox/
上記サンプルページに3列tableタグがあり以下の通り挙動が異なる。
- 通常版 → チェックボックスのクリック可能範囲はチェックボックス部分のみ
- クリック範囲拡大版 → チェックボックスのクリック可能範囲は親要素のtd部分全て
- クリック範囲拡大&tdタグにCSS追加版 → チェックボックスのクリック可能範囲は親要素のtd部分全て、尚且つチェックの有無で親要素のtdのCSSが切り替わり背景色が変わる
ソースコード
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>tableのtdタグ内にあるcheckboxのクリック範囲を拡大させるサンプル</title>
<style>
td{
border: 1px solid #ccc;
height: 100px;
width: 100px;
}
.wide td{
cursor: pointer;
}
.td_color td:has(input:checked){
background-color: #87ceeb;
}
</style>
</head>
<body>
<div>通常版</div>
<table class="normal">
<tr>
<td>
<input type="checkbox">
</td>
<td>
<input type="checkbox">
</td>
<td>
<input type="checkbox">
</td>
</tr>
</table><br>
<div>クリック範囲拡大版</div>
<table class="wide">
<tr>
<td>
<input type="checkbox">
</td>
<td>
<input type="checkbox">
</td>
<td>
<input type="checkbox">
</td>
</tr>
</table><br>
<div>クリック範囲拡大&tdタグにCSS追加版</div>
<table class="wide td_color">
<tr>
<td>
<input type="checkbox">
</td>
<td>
<input type="checkbox">
</td>
<td>
<input type="checkbox">
</td>
</tr>
</table>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
$('.wide td:has(input[type=checkbox])').on('click', function(){
$(this).find('input[type=checkbox]').click();
});
$('td input[type=checkbox]').on('click', function(event){
event.stopPropagation();
});
</script>
</body>
</html>
解説等
CSSの:has()
「.td_color td:has(input:checked)」部分は以前に書いた親要素を指定する疑似クラスとなる。つまりcheckedがついている親要素の「.td_color > tdタグ」に対してCSSを割り当てることができる。
event.stopPropagation()
バブリング対策となり「event.stopPropagation()」を指定していないと「tdクリック → checkboxクリック → tdクリック……」と無限ループになる。
尚、バブリングについてはこちらのサイトが参考になった。
参考サイト
https://renandpenta.com/css-has/
関連記事
-
-
jQueryでユーザーが編集可能な文字列をページ上に表示する際にエスケープする方法
GETパラメータを取得し、その内容をページ上に表示したいケースがあった。また、A ...
-
-
jQueryの「DateTimePicker」プラグインで日付や時間選択時に指定したイベントを実行させる方法
jQueryの「DateTimePicker」プラグインで日付や時間選択時、あら ...
-
-
セレクトメニューにサジェスト機能をつける方法(select2)
formのselectメニューで何文字が入力すると候補を絞って表示させるサジェス ...
-
-
モーダルウィンドウ表示時にウィンドウのスクロール位置をリセットする方法
モーダルウィンドウ内で「縦にスクロール→ウィンドウを閉じる→改めてモーダルウィン ...
-
-
jQueryでimgタグのsrcを変える
やりたかった事はイベントに応じてimgタグの src内のURLを変更。attrを ...