实时更改元素ID

时间:2016-07-17 00:09:39

标签: javascript jquery ajax

我正在网上开店。我有一个按钮"添加产品" id为#sendProduct。单击此按钮后,必须将id更改为#deleteProduct。它会更改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');
            }
        })

    })
});




3 个答案:

答案 0 :(得分:3)

根据我的评论中的建议编码。

$(function () {
  $('#send').click(function () {
    console.log('You clicked send.');
    $('#send, #delete').toggleClass('hidden');
  });
  $('#delete').click(function () {
    console.log('You clicked delete.');
    $('#send, #delete').toggleClass('hidden');
  });
});
.hidden { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="send">Send</button>
<button id="delete" class="hidden">Delete</button>

答案 1 :(得分:1)

一种简单安全的方法是使用彼此相邻的两个按钮。一个显示,另一个隐藏。它们将显示为用户的相同按钮。您可以使用toggle()而不是hide()和show(),但它会损害可读性,并且更难调试。

<p>
    <button id='button-one'>Submit</button>
    <button id='button-two' style='display: none;'>Submit</button>
</p>

<script>
  $('#button-one').click(function(){
     $('#button-one').hide();
     $('#button-two').show();
     // do important stuff
  });

   $('#button-two').click(function(){
     // do more important stuff and maybe toggle the visibility
     // of the buttons again
  });
</script>

答案 2 :(得分:0)

我认为更改元素的id属性并不是一个好主意,毕竟它应该对每个元素都是唯一的。

您是否尝试在单击按钮并将事件处理程序分别绑定到该类后,为该按钮添加类名? 将您的按钮ID设置为#yourButton,然后尝试使用sendProduct和deleteProduct类。 像这样:

//your button may have sendProduct class a default class
$('.sendProduct').on('click', function () {
    //yout code
    $.ajax({
        //your ajax settings
        success: function (id) {
            $('#yourButton').text('Delete from cart');
            $('#yourButton')
                .toggleClass('sendProduct') //remove this class
                .toggleClass('deleteProduct'); //add this class
        }
    });
});

$('.deleteProduct').on('click', function () {
    //your code
    $.ajax({
        //your ajax settings
        success: function (id) {
            $('#youtButton').text('Add product');
            $('#youtButton')
                .toggleClass('deleteProduct') //remove this class
                .toggleClass('sendProduct'); // add this class
        }
    })
})