jquery on click ID 仅适用于第一个输出
jquery on click ID only works for first output
对于包含 link 列表的仪表板,如果有人单击删除按钮,我想执行一些操作。但不知何故,它只在第一个 link 上响应 id="delete_link"。我需要更改什么才能让它适用于所有 lnik?
Php代码:
if($count < 1) {
echo "There are no links in this category yet";
}
while($link = $query->fetch(PDO::FETCH_OBJ)) {
echo "<li><a href='" . $link->url . "' TARGET='_BLANK'>" . $link->title . "</a>";
if($_SESSION['role'] == '2') {
echo "<span style='float:right;opacity:0.85;' class='glyphicon glyphicon-pencil'></span><span style='float:right;opacity:0.85;margin-right:10px;' id='delete_link' data-linkid='" . $link->id . "' class='glyphicon glyphicon-remove'></span>";
}
echo "</li>";
}
echo "</ul>
</div>
</div>";
}
Jquery:
$(document).ready(function(){
$('#delete_link').click(function(){
var dataId = $(this).data('linkid');
var confirmDelete = confirm("Are you sure you want to delete this link?");
if(confirmDelete == true) {
alert(dataId);
// $.ajax({
// type: "POST",
// url: "delete_link.php",
// data: ""
// })
}else {
alert("FALSE");
}
});
});
提前致谢!
使用下面的代码。将 class 'delete_link' 分配给元素而不是 id。
echo "<span style='float:right;opacity:0.85;' class='glyphicon glyphicon-pencil'></span><span style='float:right;opacity:0.85;margin-right:10px;' class='delete_link' data-linkid='" . $link->id . "' class='glyphicon glyphicon-remove'></span>";
id 在 DOM 中必须是唯一的。所以事件只适用于具有相同 id 的 i 元素。
您还需要检查 Event delegation 以将事件附加到动态创建的元素。事件委托允许我们将单个事件侦听器附加到父元素,该事件侦听器将为匹配选择器的所有后代触发,无论这些后代现在存在还是将来添加。
$(document).ready(function(){
$(document).on('click','.delete_link',function(){
var dataId = $(this).data('linkid');
var confirmDelete = confirm("Are you sure you want to delete this link?");
if(confirmDelete == true) {
alert(dataId);
// $.ajax({
// type: "POST",
// url: "delete_link.php",
// data: ""
// })
}else {
alert("FALSE");
}
});
});
在 HTML 中 ID 必须是唯一的。如果你有多个元素,你应该使用 classes.
echo "<span class='delete_link' data-linkid='" . $link->id . "' class='glyphicon glyphicon-remove'></span>";
脚本,使用class selector绑定事件
$('.delete_link').click(function(){
//Your code will work fine
});
对于包含 link 列表的仪表板,如果有人单击删除按钮,我想执行一些操作。但不知何故,它只在第一个 link 上响应 id="delete_link"。我需要更改什么才能让它适用于所有 lnik?
Php代码:
if($count < 1) {
echo "There are no links in this category yet";
}
while($link = $query->fetch(PDO::FETCH_OBJ)) {
echo "<li><a href='" . $link->url . "' TARGET='_BLANK'>" . $link->title . "</a>";
if($_SESSION['role'] == '2') {
echo "<span style='float:right;opacity:0.85;' class='glyphicon glyphicon-pencil'></span><span style='float:right;opacity:0.85;margin-right:10px;' id='delete_link' data-linkid='" . $link->id . "' class='glyphicon glyphicon-remove'></span>";
}
echo "</li>";
}
echo "</ul>
</div>
</div>";
}
Jquery:
$(document).ready(function(){
$('#delete_link').click(function(){
var dataId = $(this).data('linkid');
var confirmDelete = confirm("Are you sure you want to delete this link?");
if(confirmDelete == true) {
alert(dataId);
// $.ajax({
// type: "POST",
// url: "delete_link.php",
// data: ""
// })
}else {
alert("FALSE");
}
});
});
提前致谢!
使用下面的代码。将 class 'delete_link' 分配给元素而不是 id。
echo "<span style='float:right;opacity:0.85;' class='glyphicon glyphicon-pencil'></span><span style='float:right;opacity:0.85;margin-right:10px;' class='delete_link' data-linkid='" . $link->id . "' class='glyphicon glyphicon-remove'></span>";
id 在 DOM 中必须是唯一的。所以事件只适用于具有相同 id 的 i 元素。
您还需要检查 Event delegation 以将事件附加到动态创建的元素。事件委托允许我们将单个事件侦听器附加到父元素,该事件侦听器将为匹配选择器的所有后代触发,无论这些后代现在存在还是将来添加。
$(document).ready(function(){
$(document).on('click','.delete_link',function(){
var dataId = $(this).data('linkid');
var confirmDelete = confirm("Are you sure you want to delete this link?");
if(confirmDelete == true) {
alert(dataId);
// $.ajax({
// type: "POST",
// url: "delete_link.php",
// data: ""
// })
}else {
alert("FALSE");
}
});
});
在 HTML 中 ID 必须是唯一的。如果你有多个元素,你应该使用 classes.
echo "<span class='delete_link' data-linkid='" . $link->id . "' class='glyphicon glyphicon-remove'></span>";
脚本,使用class selector绑定事件
$('.delete_link').click(function(){
//Your code will work fine
});