Основная проблема в вашем коде заключается в том, что вы присваиваете всем элементам вашего l oop одинаковые 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>
Если вы предпочитаете использовать функцию стрелки, то вместо this
вам нужно будет использовать e.target
:
$(document).on('click', '.edit_btn', (e) => {
e.preventDefault();
var aid = $(e.target).data('id');
console.log(aid);
});