【问题标题】:how can i deal with this problem "TypeError: Cannot read property 'toString' of undefined"我该如何处理这个问题“TypeError:无法读取未定义的属性'toString'”
【发布时间】:2021-09-20 23:07:22
【问题描述】:

html 文件:-

<div class="my-3">
<label for="quantity">Quantity:</label>
<a class="minus-cart btn"><i class="fas fa-minus-square fa-lg" id="{{cart.product.id}}" ></i></a>
<span id="quantity">{{cart.quantity}}</span>
<a class="plus-cart btn"><i class="fas fa-plus-square fa-lg pid={{cart.product.id}} ></i></a>
</div>

jquery 文件:-

$('.plus-cart').click(function () {
    var id = $(this).attr("pid").toString();
    var eml = this.parentNode.children[2];
    console.log(id);
    $.ajax(
        {
            type: "GET",
            url: "/pluscart",
            data: {
                prod_id: id
            },
            success: function (data) {
                console.log(data);
                eml.innerText = data.quantity;
                document.getElementById("amount").innerText = data.amount.toFixed(2);
                document.getElementById("totalamount").innerText = data.totalamount.toFixed(2);
            }
        })
});

error image

请帮我解决这个问题,这是我在项目中发生的最后一个错误

【问题讨论】:

    标签: jquery django django-models django-forms django-templates


    【解决方案1】:

    pid 在子元素 (i) 中,不在 a 标记中

    $(this).children("i").attr("pid").toString()
    

    或者将pid移动到a标签

    <a class="plus-cart btn" pid={{cart.product.id}}><i class="fas fa-plus-square fa-lg></i></a>
    

    【讨论】:

    • 但是在这样做之后我也会得到错误,他们无法读取 cart.product.id 的值,但是如果我显示 cart.product.id 他们可以显示值但他们不能发送到 ajax 那又怎样我可以吗
    【解决方案2】:

    出现此错误是因为 pid 不在 a 标签中。

    <div class="my-3">
    <label for="quantity">Quantity:</label>
    <a class="minus-cart btn"><i class="fas fa-minus-square fa-lg" id="{{cart.product.id}}"></i></a>
    <span id="quantity">{{cart.quantity}}</span>
    <a class="plus-cart btn" pid={{cart.product.id}}><i class="fas fa-plus-square fa-lg></i></a>
    </div>
    

    请像这样修复它。

    其他方式:

    我认为如果你使用 attr 发送一些数据,编码风格是不够的

    你可以像这样使用数据属性来做到这一点。

    in html

    <div class="my-3">
    <label for="quantity">Quantity:</label>
    <a class="minus-cart btn"><i class="fas fa-minus-square fa-lg" id="{{cart.product.id}}"></i></a>
    <span id="quantity">{{cart.quantity}}</span>
    <a class="plus-cart btn" data-pid={{cart.product.id}}><i class="fas fa-plus-square fa-lg></i></a>
    </div>
    

    in jquery

    $('.plus-cart').click(function () {
        var id = $(this).data("pid").toString();
        var eml = this.parentNode.children[2];
        console.log(id);
        $.ajax(
            {
                type: "GET",
                url: "/pluscart",
                data: {
                    prod_id: id
                },
                success: function (data) {
                    console.log(data);
                    eml.innerText = data.quantity;
                    document.getElementById("amount").innerText = data.amount.toFixed(2);
                    document.getElementById("totalamount").innerText = data.totalamount.toFixed(2);
                }
            })
    });
    

    另外我认为你不需要调用.toString() 方法。

    【讨论】:

    • 你能详细解释一下吗?
    • 非常感谢先生的支持,我已经完成了我的整个项目,谢谢你一次又一次地做很多事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多