I have this while loop in PHP
JavaScript
x
<?php
while ($row = mysqli_fetch_assoc($getPosts)) {
$post_id = $row['post_id'];
echo "<td><a rel='$post_id' id='get_post_id'
onclick='active_del_modal()'>Delete</a></td>";
}
?>
In this loop, when we click on the “delete” link, the value of variable “$post_id” changes. I want to get the value of “$post_id” when it changes. I tried with this JS code
JavaScript
function active_del_modal() {
var x = document.getElementById("get_post_id").getAttribute("rel");
alert(x);
}
But it only gives me the last value of “$post_id”. I want to get each value of “$post_id” when it changes and this value should be individual, not like this 23 46 545 545, etc. I don’t want to use any framework like jQuery.
Advertisement
Answer
- An ID must be unique in a document. So stop using static IDs in a loop.
- Links go somewhere. Don’t use a link if you aren’t navigating. Use a button if you want something to click on to trigger JS. Apply CSS if you don’t like the default appearance of a button.
- A post ID is not a type of relationship. Don’t abuse
rel
attributes. (Appropriate use would be something like<a href="page2.html" rel="next">
) Use adata-*
attribute if you need to associate custom data with an element. - Intrinsic event attributes have a bunch of gotchas associated with them. Don’t use them. Use
addEventListener
and friends instead.
JavaScript
function active_del_modal(event) {
const button = event.target;
const id = button.dataset.postId;
console.log({
id
});
}
document.querySelector("#delete-buttons").addEventListener("click", active_del_modal);
JavaScript
button {
border: none;
background: none;
colour: blue;
cursor: pointer;
}
button:hover {
text-decoration: underline;
}
JavaScript
<ul id="delete-buttons">
<li><button type="button" data-post-id="$post_id">Delete</button></li>
<li><button type="button" data-post-id="foo">Delete</button></li>
<li><button type="button" data-post-id="bar">Delete</button></li>
</ul>