I am trying to make a notification system for a school project, jQuery is not allowed! Each time there is a notification I’m creating a div with an onclick button to acknowledge the notification with the id as parameter.
Then my function JavaScript get the div and pass the notification to a 1 status in SQL with ajax and finally close the div. When I only have one notification it’s working perfectly but when there is multiple div, my script seem unable to close each notification and I need to refresh my page to close each div.
My code:
foreach($notifs as $notif){ $id = $notif["id"]; ?> <div id="notifAlert"> <p><?= $notif["content"]; ?><br> <button onclick="seenNotif(<?= $id; ?>)">OK</button></p> </div> <?php } } ?>
function seenNotif(idNotif){ console.log(idNotif); const divNotif = document.getElementById("notifAlert"); const footer = document.getElementById("foot"); const req = new XMLHttpRequest(); req.onreadystatechange = function () { if (req.readyState === 4){ footer.removeChild(divNotif); } }; req.open("GET", "notifStatut.php?idNotif="+idNotif); req.send(); }
require ("functions.php"); $idNotif = $_GET["idNotif"]; $connection = connectDB(); $query = $connection->prepare("UPDATE notifications SET statut = :statut WHERE id = :idNotif"); $query->execute([ "statut" => 1, "idNotif" => $idNotif ]);
Advertisement
Answer
As said, id’s have to be unique. The simplest solution is to change
in PHP
<div id="notifAlert">
to
<div id="notifAlert<?= $id ?>">
(add $id
to the id to make it unique)
and in javascript
document.getElementById("notifAlert")
to
document.getElementById("notifAlert"+idNotif)
Th should get you the div you want.