我想在从数据库中获取记录的循环中显示警报消息。问题是,弹出窗口仅适用于一项,而另一项则不显示任何弹出窗口。
怎么了
PHP:
$query = "SELECT * FROM discount
WHERE consecutivedays <= DATEDIFF('$date2','$date1')
AND idbeach = '$idbeach'
ORDER BY consecutivedays desc
LIMIT 1";
$results = mysqli_query($conn, $query);
while($row = $results->fetch_assoc()){
$reserved= $row['discountperc'];
if ($reserved=="yes") {
$getbooking = new WA_MySQLi_RS("getbooking",$sis,1);
$getbooking->setQuery("SELECT `name`,
CONCAT(`datein`,' - ',`dateout`) AS dates,
price,discount,comment
FROM booking
where idseatbeach = '$idseatbeach'
order by datein limit 1");
$getbooking->execute();
$name=$getbooking->getColumnVal("name");
$dates=$getbooking->getColumnVal("dates");
$price=$getbooking->getColumnVal("price");
$discount=$getbooking->getColumnVal("discount");
$comment=$getbooking->getColumnVal("comment");
$message = "Booked by: $name\n
Date range: $dates\n
Price :$price\n
Discount :$discount\n
Comment :$comment";
?>
<div class="item" >
<div class="popup" onclick="myFunction()">
<span class="popuptext" id="myPopup"><?php echo $message;?></span>
<img src="images/umbrelladisactive.png" width="35" height="35"
alt="<?php echo $nameseat; ?> "/>
<p style="margin-right: 0px; color: blue;">Currently Booked</p>
</div>
</div>
<?php
}
}
JavaScript:
var stile = "top=10, left=10, width=450, height=350,
status=no, menubar=no, toolbar=no scrollbars=no";
function myFunction() {
var popup = document.getElementById("myPopup");
popup.classList.toggle("show");
}
CSS:
.item {
width: 100px;
text-align: center;
display: block;
background-color: transparent;
border: 1px solid transparent;
margin-right: 10px;
margin-bottom: 1px;
float: left;
}
#index-gallery {
width: 50px;
}
/* Popup container */
.popup {
position: relative;
display: inline-block;
cursor: pointer;
}
/* The actual popup (appears on top) */
.popup .popuptext {
visibility: hidden;
width: 160px;
background-color: #555;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -80px;
}
/* Popup arrow */
.popup .popuptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #555 transparent transparent transparent;
}
/* Toggle this class when clicking on the popup container (hide and show the popup) */
.popup .show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s
}
/* Add animation (fade in the popup) */
@-webkit-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
HTML中的ID必须是文档唯一的,这意味着您不能在循环中重复该ID。我建议改用一个类,以便可以重复。
无论单击哪个元素,您都需要弹出与(嵌套)关联的元素。我建议向每个事件监听器添加一个事件监听器,该事件监听器.popop
将在单击时触发处理程序功能。该函数应通过使用querySelector
并切换其“显示”类来在clicked元素中找到弹出文本。
这是一个基本示例:
// define a function to show a popup's popuptext.
function popItUp() {
this.querySelector('.popuptext').classList.toggle("show");
}
// define all popup elements.
let popups = document.querySelectorAll('.popup');
// add listener to each popup element, which binds handler function to click event.
popups.forEach(
popup => popup.addEventListener('click', popItUp)
);
/*
// The arrow function above is equivalent to:
popups.forEach(function(popup){
popup.addEventListener('click', popItUp);
});
*/
.item {
width: 100px;
text-align: center;
display: block;
background-color: transparent;
border: 1px solid transparent;
margin: 80px 0 0 50px;
float: left;
}
.popup {
position: relative;
cursor: pointer;
}
.popup .popuptext {
visibility: hidden;
width: 160px;
background-color: #555;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -80px;
}
.popup .popuptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #555 transparent transparent transparent;
}
.popuptext.show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s
}
@-webkit-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
<div class="item">
<div class="popup">
<span class="popuptext">Popup Message 1</span>
<p>Currently Booked</p>
</div>
</div>
<div class="item">
<div class="popup">
<span class="popuptext">Popup Message 2</span>
<p>Currently Booked</p>
</div>
</div>
<div class="item">
<div class="popup">
<span class="popuptext">Popup Message 3</span>
<p>Currently Booked</p>
</div>
</div>
CSS可能还有其他布局问题,但这可能使您对JavaScript实现有所了解。
以供参考:
所述
id
全局属性定义的标识符(ID),其必须在整个文档中是唯一的。
Document方法
querySelectorAll()
返回一个静态(非实时)NodeList,该NodeList表示与指定的选择器组匹配的文档元素的列表。
EventTarget方法
addEventListener()
设置了一个函数,只要将指定事件传递给目标,该函数就会被调用。
querySelector()
Element接口的方法返回第一个元素,该元素是在其上调用的,与指定选择器组匹配的元素的后代。
顺便说一句,我还注意到您的查询包含LIMIT 1
,因此while
循环不会重复多次。您可能要删除(或增加)该限制:
$query = "SELECT * FROM discount
WHERE consecutivedays <= DATEDIFF('$date2','$date1')
AND idbeach = '$idbeach'
ORDER BY consecutivedays desc;";
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句