触发循环产生的多个弹出窗口

本森·基普罗诺(Benson Kiprono)

我想在从数据库中获取记录的循环中显示警报消息。问题是,弹出窗口仅适用于一项,而另一项则不显示任何弹出窗口。

怎么了

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;
  }
}
showdev

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

防止孩子发生点击事件,产生由父母触发的弹出窗口

来自分类Dev

滚动时触发弹出窗口

来自分类Dev

如何打开多个弹出窗口?

来自分类Dev

android中的多个弹出窗口

来自分类Dev

Android关闭多个弹出窗口

来自分类Dev

控制多个弹出窗口的位置

来自分类Dev

如何调用多个弹出窗口?

来自分类Dev

Sencha Touch创建在单击Container时无法销毁弹出窗口,它会创建多个弹出窗口并在设置数据值时产生错误

来自分类Dev

Sencha Touch创建在单击Container时无法销毁弹出窗口,它会创建多个弹出窗口并在设置数据值时产生错误

来自分类Dev

在窗口中创建多个弹出窗口

来自分类Dev

在窗口中创建多个弹出窗口

来自分类Dev

触发弹出窗口的主干事件被阻止。

来自分类Dev

从MasterView触发DetailView中的弹出窗口

来自分类Dev

如何使用触发按钮关闭弹出窗口

来自分类Dev

触发 cmd + shift + a 后奇怪的弹出窗口

来自分类Dev

foreach循环中按钮的弹出窗口PHP

来自分类Dev

多个模式弹出窗口vue.js

来自分类Dev

如何覆盖“下陷多个文件”弹出窗口

来自分类Dev

防止在angularJS中打开多个弹出窗口

来自分类Dev

如何同时处理多个弹出窗口

来自分类Dev

如何防止打开多个弹出窗口?

来自分类Dev

如何同时打开多个JavaScript弹出窗口?

来自分类Dev

带有按钮的多个弹出窗口

来自分类Dev

For循环打开多个Powershell窗口

来自分类Dev

弹出窗口内的按钮不会触发弹出窗口外的点击事件

来自分类Dev

如何在mouseover事件上触发启动弹出窗口

来自分类Dev

按钮单击不触发弹出窗口形式

来自分类Dev

单击按钮以MVC形式触发模式弹出窗口

来自分类Dev

模态弹出窗口中的click事件不会被触发

Related 相关文章

热门标签

归档