NOTE that I'm already using .on function as most of the answers suggest. This problem is vastly different than other problems of the same category.
My HTML Code is :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Order Stack</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="container">
<div>
<h1>Enter Your Order</h1>
<div id="orderBox">
<input type="textbox" id="name" placeholder="Name">
<input type="textbox" id="order" placeholder="Order">
<input type="submit" id="submit" value="Order Now">
</div>
</div>
<div id="orderList">
<h1>Pending Order List</h1>
<p class="orderDisp">
<span class="orderId">OrderID:</span> 1 <span class="orderName">Name:</span> John Doe <span class="orderContent">Order:</span> CheeseBurger
<img class="deleteBtn" src="images/delete.png" alt="Delete Order">
</p>
<p class="orderDisp">
<span class="orderId">OrderID:</span> 2 <span class="orderName">Name:</span> Jane Doe <span class="orderContent">Order:</span> Steak
<img class="deleteBtn" src="images/delete.png" alt="Delete Order">
</p>
<p class="orderDisp">
<span class="orderId">OrderID:</span> 3 <span class="orderName">Name:</span> Santa Claus <span class="orderContent">Order:</span> Chicken Zinger Burger
<img class="deleteBtn" src="images/delete.png" alt="Delete Order">
</p>
</div>
</div>
<script type="text/javascript" src="jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
My CSS is :
body {
font-family: Verdana, sans-serif;
font-size: medium;
background: #F2E5A0 url(images/The-Cheeseburger.png) no-repeat;
background-size: cover;
padding: 50px;
}
h1 {
color: #000;
}
#orderBox {
background-color: #B7BBDC;
padding: 25px;
}
#name {
width: 200px;
text-align: center;
}
#order {
width: 500px;
}
#container {
opacity: 0.8;
background-color: #F2C095;
padding: 50px;
min-width: 875px;
}
.orderDisp {
background-color: #A6D98F;
padding: 20px;
position: relative;
}
.orderId, .orderName, .orderContent {
font-weight: bold;
padding-left: 20px;
color: #223A2B;
}
.deleteBtn {
height: 20px;
vertical-align: middle;
text-align: right;
position: absolute;
top: 35%;
left: 95%;
}
My jQuery is :
$(document).ready(function() {
var orderId=4; // Starting form 4
$("#submit").click(function() {
var orderName = $("#name").val();
var orderContent = $("#order").val();
orderName = orderName.trim();
orderContent = orderContent.trim();
if((orderName !== "") && (orderContent !== ""))
{
$p = $('<p class="orderDisp">');
var content = '<span class="orderId">OrderID:</span> '+orderId+' <span class="orderName">Name:</span> '+orderName+' <span class="orderContent">Order:</span> '+orderContent;
content += '<img class="deleteBtn" src="images/delete.png" alt="Delete Order">';
$p.append(content);
$p.appendTo('#orderList');
}
$("#name").val("");
$("#order").val("");
});
$("#order").keydown(function(e) {
if(e.keyCode == 13)
$("#submit").click();
});
$(".deleteBtn").on('click',function() {
$(this).parent().remove();
});
});
To describe the problem, here's a working fiddle.
I know that dynamically created elements (elements created via code) are not triggered normally by .click()
event handlers. One has to use .on("event", function() { ...code...});
to bind the event to the element. I've already done this. Yet, somehow, the deleteBtn's code is still not triggered. I can't figure out what's wrong.