【发布时间】:2020-05-03 17:00:21
【问题描述】:
请访问页面查看详细问题https://ibnul.neocities.org/_temporary/au2pr11/au2pr11.html
我这里有 3 张卡片。他们每个人都有一个删除按钮。单击它会触发覆盖对话框以取消或确认。如果我单击取消,它应该会消失,我自己可以做到这一点。但是,如果我单击确认按钮,它应该会消失并删除删除按钮触发覆盖对话框的卡。
但覆盖对话框是一个用于所有卡片的单一对话框。而且所有卡片都有相同的类名,我也想保持这种方式,因为我想多次复制粘贴,所以我不想给不同的类或 ID 名称并为每个卡片编写不同的函数。如何检测单击删除图标的元素,然后如果用户单击确认按钮,整个卡片应该消失?我想通过在 res-card-outer 元素上添加一个名为 hide-res-card-outer 的类名来删除卡片。
请用纯 JavaScript 显示。
var delete_menu_btns = document.querySelectorAll('.del-menu-icon-image');
var del_conf_overlay_box = document.querySelector('.del-conf-overl-outer');
var del_conf_cancel_btn = document.querySelector('.del-conf-cancel-btn');
var del_conf_confirm_btn = document.querySelector('.del-conf-confirm-btn');
delete_menu_btns.forEach(btn => {
btn.addEventListener('click', showDeleteConfBox);
});
function showDeleteConfBox() {
del_conf_overlay_box.classList.add('show-del-conf-overl-box');
}
del_conf_cancel_btn.addEventListener('click', removeDeleteconfBox);
del_conf_confirm_btn.addEventListener('click', removeDeleteconfBox);
function removeDeleteconfBox() {
del_conf_overlay_box.classList.remove('show-del-conf-overl-box');
}
* {
margin: 0px;
font-family: 'Segoe UI', sans-serif;
}
body {
background-color: rgb(240, 240, 240);
}
.res-card-cont {
padding: 20px 100px;
}
.res-card-outer {
background-color: #fdfdfd;
padding: 10px 10px 10px 10px;
margin: 15px 0px 15px 0px;
}
.res-card-top-imginfo-box {
display: flex;
}
.res-card-image {
width: 230px;
height: 145px;
}
.res-card-info-box {
flex-grow: 2;
padding: 5px 10px 5px 20px;
}
.res-card-title-price-cont {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.res-card-title-text {
font-size: 18px;
color: rgb(107, 107, 107);
padding: 2px 5px 4px 0px;
white-space: nowrap;
}
.res-card-title-text:hover {
color: green;
}
.res-card-price-text {
font-size: 18px;
white-space: nowrap;
color: rgb(107, 107, 107);
padding: 2px 0px 4px 0px;
}
.res-card-det-text {
font-size: 14px;
color: #8d8d8d;
padding: 6px 0px 6px 0px;
}
.res-card-det-text > span {
padding: 0px 8px 0px 0px;
}
.res-loc-shre-con {
display: flex;
justify-content: space-between;
padding: 4px 0px 5px 0px;
}
.res-loc-leftsd-con {
display: flex;
}
.res-location-ico {
width: 17px;
height: 17px;
cursor: pointer;
padding: 1px 7px 0px 3px;
opacity: 0.7;
}
.res-location-ico:hover {
opacity: 0.9;
}
.res-location-text {
font-size: 14px;
color: #8d8d8d;
padding: 2px 5px 0px 5px;
}
.res-share-ico-box {
display: flex;
padding: 2px 5px 2px 15px;
}
.res-share-ico-link {
margin: 0px 3px 0px 3px;
}
.res-share-icon {
width: 14px;
height: 14px;
opacity: 0.6;
}
.res-share-icon:hover {
opacity: 0.8;
}
.del-menu-icon-con {
position: relative;
margin: -2px 0px -2px 0px;
}
.del-menu-text-icon-con {
display: flex;
align-items: center;
opacity: 0.8;
}
.del-menu-text-icon-con:hover {
opacity: 1;
}
.del-menu-icon-image {
cursor: pointer;
width: 22px;
height: 18px;
padding: 2px 2px 2px 2px;
}
.del-conf-overl-outer {
position: fixed;
z-index: 100;
top: 0px;
left: 0px;
width: 100vw;
height: 100vh;
display: none;
}
.del-conf-overl-inner {
height: 100%;
padding: 10px 15px 10px 15px;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0, 0.692);
}
.del-conf-overl-box {
padding: 10px 20px 20px 20px;
width: 350px;
background-color: white;
}
.del-conf-text1 {
font-size: 22px;
padding: 10px 0px 10px 0px;
}
.del-conf-text2 {
font-size: 15px;
padding: 5px 0px 10px 0px;
}
.del-conf-btns-con {
display: flex;
justify-content: flex-end;
padding: 20px 0px 5px 0px;
}
.del-conf-cancel-btn {
border: none;
padding: 5px 18px;
font-size: 14px;
background-color: #90b974;
color: #ffffff;
}
.del-conf-cancel-btn:hover {
background-color: #79b84f;
}
.del-conf-confirm-btn {
border: none;
padding: 5px 18px;
margin: 0px 0px 0px 10px;
font-size: 14px;
background-color: #f34c46;
color: #ffffff;
}
.del-conf-confirm-btn:hover {
background-color: #f8170f;
}
.show-del-conf-overl-box {
display: block;
}
.hide-res-card-outer {
display: none;
}
<!-- result card box start -->
<div class='bdy-adv-res-cont-inner'>
<div class='res-card-cont'>
<div class='res-card-outer'>
<div class='res-card-top-imginfo-box'>
<img class='res-card-image' src='car1.webp' alt=''>
<div class='res-card-info-box'>
<div class='res-card-title-price-cont'>
<a class='res-card-title-text' href=''>Lamborghini Veneno</a>
<p class='res-card-price-text'>200000 €</p>
</div>
<p class='res-card-det-text'>
<span class=''>FR 2/2019</span>
<span class=''>Disel</span>
<span class=''>4895 km</span>
<span class=''>1895ps</span>
<span class=''>HU 4/2001</span>
</p>
<p class='res-card-det-text'>
<span class=''>Semi-automatic</span>
<span class=''>Disel</span>
<span class=''>80mg</span>
<span class=''>7,51</span>
</p>
<p class='res-card-det-text'>
<span class=''>Private</span>
<span class='res-dettext-hid'>au2mobile</span>
</p>
<div class='res-loc-shre-con'>
<div class='res-loc-leftsd-con'>
<img class='res-location-ico' src='location-icon-red.svg' alt='' title='Location map'>
<p class='res-location-text'>2948 Resoif Voufo</p>
</div>
<div class='del-menu-icon-con'>
<div class='del-menu-text-icon-con'>
<img class='del-menu-icon-image' src='delete-icon-blue.svg' alt='' title='Delete'>
</div>
</div>
</div>
</div>
</div>
</div>
<div class='res-card-outer'>
<div class='res-card-top-imginfo-box'>
<img class='res-card-image' src='car4.webp' alt=''>
<div class='res-card-info-box'>
<div class='res-card-title-price-cont'>
<a class='res-card-title-text' href=''>Ferrari 2018</a>
<p class='res-card-price-text'>7895.3 €</p>
</div>
<p class='res-card-det-text'>
<span class=''>FR 2/2019</span>
<span class=''>Disel</span>
<span class=''>95 km</span>
<span class=''>60ps</span>
<span class=''>HU 4/2001</span>
</p>
<p class='res-card-det-text'>
<span class=''>Semi-automatic</span>
<span class=''>Petrol</span>
<span class=''>80mg</span>
<span class=''>7,51</span>
</p>
<p class='res-card-det-text'>
<span class=''>Private</span>
<span class='res-dettext-hid'>au2mobile</span>
</p>
<div class='res-loc-shre-con'>
<div class='res-loc-leftsd-con'>
<img class='res-location-ico' src='location-icon-red.svg' alt='' title='Location map'>
<p class='res-location-text'>2948 Resoif Voufo</p>
</div>
<div class='del-menu-icon-con'>
<div class='del-menu-text-icon-con'>
<img class='del-menu-icon-image' src='delete-icon-blue.svg' alt='' title='Delete'>
</div>
</div>
</div>
</div>
</div>
</div>
<div class='res-card-outer'>
<div class='res-card-top-imginfo-box'>
<img class='res-card-image' src='car5.webp' alt=''>
<div class='res-card-info-box'>
<div class='res-card-title-price-cont'>
<a class='res-card-title-text' href=''>Nissan 2019</a>
<p class='res-card-price-text'>2569.2 €</p>
</div>
<p class='res-card-det-text'>
<span class=''>FR 2/2019</span>
<span class=''>Disel</span>
<span class=''>200 km</span>
<span class=''>1895ps</span>
<span class=''>HU 4/2001</span>
</p>
<p class='res-card-det-text'>
<span class=''>Gearbox</span>
<span class=''>Disel</span>
<span class=''>80mg</span>
<span class=''>7,51</span>
</p>
<p class='res-card-det-text'>
<span class=''>Private</span>
<span class='res-dettext-hid'>au2mobile</span>
</p>
<div class='res-loc-shre-con'>
<div class='res-loc-leftsd-con'>
<img class='res-location-ico' src='location-icon-red.svg' alt='' title='Location map'>
<p class='res-location-text'>2948 Resoif Voufo</p>
</div>
<div class='del-menu-icon-con'>
<div class='del-menu-text-icon-con'>
<img class='del-menu-icon-image' src='delete-icon-blue.svg' alt='' title='Delete'>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- result card box end -->
<!-- delete confirm overlay start -->
<div class='del-conf-overl-outer'>
<div class='del-conf-overl-inner'>
<div class='del-conf-overl-box'>
<p class='del-conf-text1'>Confirm!</p>
<p class='del-conf-text2'>Are you sure you want to delete your favourites!</p>
<div class='del-conf-btns-con'>
<button class='del-conf-cancel-btn' type='button'>Cancel</button>
<button class='del-conf-confirm-btn' type='button'>Confirm</button>
</div>
</div>
</div>
</div>
<!-- delete confirm overlay end -->
【问题讨论】:
标签: javascript html css