for文でのモーダルダイアログ
for文(django)でモーダルダイアログを使う事があるので、メモ。
基本形は、CSS3とHTML5だけでモーダルダイアログを作る【JS不要】から引用しました。
for文内ではない、モーダルダイアログの基本形。
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Hello World test!!</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<label class="modal_label" for="modal_chk">新規作成</label>
<input id="modal_chk" class="modal_chk" type="checkbox">
<div class="modal_body">
<label class="modal_bg" for="modal_chk"></label>
<div class="modal_content"></div>
</div>
</body>
</html>
CSS
body { margin:0; }
.modal_label {
border:solid 0.1rem black;
padding:0.25rem;
cursor:pointer;
}
.modal_body { display:none; }
.modal_chk { display:none; }
.modal_bg {
position:fixed;
top:0;
left:0;
width:100vw;
height:100vh;
background:rgba(0,0,0,0.8);
cursor:pointer;
}
.modal_content {
position:absolute;
top:50%;
left:50%;
width:80%;
height:80%;
transform:translate(-50%,-50%);
background:white;
}
input[type="checkbox"]#modal_chk:checked + .modal_body { display:block; }
次に、django、for文内でのモーダルダイアログ。
HTML
<div style="position:relative;">
{% for s in samples %}
<label id="modal_label_{{ s.id }}" class="modal_label" for="modal_chk_{{ s.id }}">新規作成</label>
<input id="modal_chk_{{ s.id }}" class="modal_chk" type="checkbox">
<div id="modal_body_{{ s.id }}" class="modal_body">
<label id="modal_bg_{{ s.id }}" class="modal_bg" for="modal_chk_{{ s.id }}"></label>
<div class="modal_content"></div>
</div>
(以下、略)
{% endfor %}
</div>
jQuery
window.addEventListener("load" , function (){
$(document).on('click',".modal_label", function() { modal_open( $(this).attr("id").replace("modal_label_","") ); });
$(document).on('click',".modal_bg", function() { modal_close( $(this).attr("id").replace("modal_bg_","") ); });
});
function modal_open(pk) {
$('#modal_body_' + pk).css('display', 'block');
}
function modal_close(pk) {
$("#modal_body_" + pk).css('display', 'none');
}
後は、モーダル内に必要なものを設置して、CSS で装飾すると動きます。