私はオンラインショップを作成中です。私はid #sendProductのボタン "Add product"を持っています。このボタンをクリックすると、idを#deleteProductに変更する必要があります。これはIDを変更しますが、IDの変更後も古いハンドラはまだアクティブです。私はボタンをもう一度クリックすると、idのように反応したことに変わりはありません。 私のコードを見てください。私のコメントで提案をもとにエレメントIDをリアルタイムで変更する
$(document).ready(function() {
$('#sendProduct').on('click', function() {
var id = $(this).attr('data-id');
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$.ajax({
url: '/cart/add-to-cart',
method: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(id),
beforeSend: function (xhr) {
xhr.setRequestHeader(header, token);
},
dataType: 'json',
success: function (id) {
$('#sendProduct').text('Delete from cart');
$('#sendProduct').attr('data-id', id);
$('#sendProduct').attr('id', 'deleteProduct');
console.log($('#deleteProduct').attr('id'));
}
});
});
$('#deleteProduct').on('click', function() {
var id = $(this).attr('data-id');
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$.ajax({
url: '/cart/delete-product',
method: 'GET',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(id),
beforeSend: function (xhr) {
xhr.setRequestHeader(header, token);
},
dataType: 'json',
success: function (id) {
$('#deleteButton').text('Add product');
$('#deleteButton').attr('data-id', id);
$('#deleteButton').attr('id', 'sendProduct');
}
})
})
});
ノードのIDを変更しても、既存のハンドラは削除されません。実際に何をしようとしていますか? – smarx
コードをスキミングすると、より良い解決策は、2つのボタンを1つだけ表示することです。 1つがクリックされたときにその表示を切り替えるだけです。 – smarx
また、必要に応じて成功の約束で新しいイベントハンドラを作成することもできます。 –