You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AJAX修改/删除购物车后表格仅重载一次如何解决

问题原因

你使用的直接绑定事件的写法仅对页面初始加载时已存在的DOM元素生效,调用$("#cart").load(" #cart")重载购物车容器后,原有绑定了事件的元素会被全部替换,新渲染出来的数量输入框、删除按钮没有绑定对应事件,后续操作自然不会触发响应。

解决方案

改用jQuery事件委托机制,将事件绑定到不会被重载替换的父级元素上(可选用document、body或其他固定的外层容器),事件会自动作用于后续动态生成的匹配子元素。

修改后的代码如下:

<script type="text/javascript">
// 事件委托绑定change事件,适配动态生成的数量修改元素
$(document).on('change', '.update-cart', function (e) {
    e.preventDefault();
    var ele = $(this);
    $.ajax({
        url: '{{ route('update.cart') }}',
        method: "patch",
        data: {
            _token: '{{ csrf_token() }}', 
            id: ele.parents("tr").attr("data-id"), 
            quantity: ele.parents("tr").find(".quantity").val()
        },
        success: function (response) {
            $("#cart").load(" #cart");
        }
    });
});

// 事件委托绑定click事件,适配动态生成的删除元素
$(document).on('click', '.remove-from-cart', function (e) {
    e.preventDefault();
    var ele = $(this);
    if(confirm("Are you sure want to remove?")) {
        $.ajax({
            url: '{{ route('remove.from.cart') }}',
            method: "DELETE",
            data: {
                _token: '{{ csrf_token() }}', 
                id: ele.parents("tr").attr("data-id")
            },
            success: function (response) {
                $("#cart").load(" #cart");
            }
        });
    }
});
</script>

如果页面存在比document更靠近购物车容器的固定外层元素,替换代码中的document为该元素的选择器可获得更好的性能。

内容的提问来源于stack exchange,提问作者Muhammad Mehdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:06:03