[英]How to avoid data-id from returning same id of the table element from php loop
我想使用 AJAX 更新记录,但是当我单击按钮edit
该行时,我获得了与table
元素中第一行相同的data-id
。
<table>
<!-- this data inside php foreach loop displayed via ajax -->
<tr>
<td> <a href="<?= $row->id; ?>" id="edit_btn" data-id="<?= $row->id; ?>">edit</a></td>
<td> <a href="<?= $row->id;?>'" id="delete_btn" data-id="<?= $row->id; ?>">delete</a></td>
</tr>
</table>
$(function($) {
edit();
})(jQuery);
function edit() {
$(document).on('click', '#edit_btn', (e) => {
e.preventDefault();
var aid = $('#edit_btn').attr('data-id');
// var aid = $('#edit_btn').data('id');
alert(aid);
});
}
您代码中的主要问题是因为您为循环中的所有元素提供了相同的id
,这是无效的。 id
属性在 DOM 中必须是唯一的。 您应该使用类来附加事件处理程序,然后在事件处理程序中使用this
关键字来获取对引发事件的元素的引用。 后一点意味着您需要删除箭头函数并使用匿名函数代替。
话虽如此,您的代码中还有其他问题需要解决。 首先,document.ready 事件处理程序不是 IIFE。 从它的末尾删除(jQuery)
。 此外,使用data()
来检索数据属性,而不是attr()
。 最后,不要使用alert()
进行调试,因为它会强制转换数据类型。 请改用console.log()
。
jQuery(function($) { edit(); }); function edit() { $(document).on('click', '.edit_btn', (e) => { e.preventDefault(); var aid = $(e.target).data('id'); console.log(aid); }); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <!-- inside your loop ... --> <tr> <td><a href="#1" class="edit_btn" data-id="1">edit</a></td> <td><a href="#1" class="delete_btn" data-id="1">delete</a></td> </tr> <tr> <td><a href="#2" class="edit_btn" data-id="2">edit</a></td> <td><a href="#2" class="delete_btn" data-id="2">delete</a></td> </tr> <tr> <td><a href="#3" class="edit_btn" data-id="3">edit</a></td> <td><a href="#3" class="delete_btn" data-id="3">delete</a></td> </tr> </table>
如果你更喜欢使用箭头函数,那么你需要使用e.target
来代替this
:
$(document).on('click', '.edit_btn', (e) => {
e.preventDefault();
var aid = $(e.target).data('id');
console.log(aid);
});
您可以在回调中使用$(this)
来仅操作单击的元素
<td><a class="edit_btn" data-id="<?= $row->id; ?>">edit</a></td> <td><a class="delete_btn" data-id="<?= $row->id; ?>">delete</a></td> $(document).on('click','.edit_btn', function(e) { e.preventDefault(); var aid = $(this).data('id'); alert(aid); });
您应该使用data 方法检索数据 ID:
var aid = $('#edit_btn').data('id');
警告
ID's Must Be Unique ,特别是因为当您尝试与这些元素交互时,它会导致JavaScript和 CSS 出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.