У меня есть кнопка, которая при нажатии должна вызывать следующий клуб в DOM без обновления. Один раз работает для следующего клуба, но после этого не работает. Мне нужно как-то изменить идентификатор клуба на кнопке, чтобы API мог получать информацию о следующем клубе. Я не уверен, как лучше это сделать. Любые идеи?
<div class = "container-fluid">
<h1>Your Club</h1>
<br>
<div id = "club-info">
<h2 class = "club-name"><%= @club.name %></h2>
<br>
<h2 class = "club-brand"><%= @club.brand %></h2>
</div>
<br>
<button class = "next-club" data-id = "<%= @club.id %>">Next Club</button>
<br>
<br>
<%= link_to "See all of your clubs", club_path %>
</div>
<script type = "text/javascript" charset = "utf-8">
$(function() {
$('.next-club').click(function() {
var id = $(this).data("id");
$('#club-info').html('')
$.get('/clubs/' + id + '/next', function(data, status) {
$('#club-info').append(`<h2>${data.name}</h2>` +
`<br>` +
`<h2>${data.brand}</h2>`);
})
})
});
</script>

При успешном получении запроса вы можете добавить
$('.next-club').data('id', data.id);
Вышеупомянутое будет использовать JQuery .data для изменения отправленного идентификатора. (https://api.jquery.com/data/)
Вам нужно назначить новый идентификатор кнопке после успеха и убедиться, что этот атрибут данных кнопки динамически обновляется.
Проверьте часть $that.data, где назначается новый идентификатор данных. если вы используете friendly-id, сделайте это.
$(document).on('click', '.next-club', function(e) {
e.preventDefault();
var id = $(this).data("id");
var $that = $(this);
$.get('/clubs/' + id + '/next', function(data, status) {
if (status == 'success'){
$('#club-info').html('')
$('#club-info').append(`<h2>${data.name}</h2>` +
`<br>` +
`<h2>${data.brand}</h2>`);
$that.data('id', data.id); #assign new id
}
})
}
Это потрясающе. Спасибо!