TypeError:无法在addItemToCart读取null的属性“ push”

时间:2018-10-02 18:42:15

标签: javascript

我已经尝试在整个论坛中搜索并建议帖子,但不是我想要的。

问题是::单击列表项时,我在函数cart.push(item);内的addItemToCart中收到标题中提到的错误。我发现这是由于未声明数组引起的,但是我相信ei已经声明了它。

问题是:我是否正确声明了数组变量的范围?还是我在其他事情上有问题?

这是html部分:

 <div>
    <ul>
        <li><a class="add-to-cart" href="#" data-name="Apple" data-price="1.99">Product1</li>
    </ul>
</div>

此html部分通过下一个 click函数被引用到脚本内部:

        $(".add-to-cart").click(function(event){
            event.preventDefault(); // --> Prevents page from refreshing
            var name = $(this).attr("data-name");
            var price = Number($(this).attr("data-price"));

            addItemToCart(name, price, 1);

        });

这部分是在JS脚本的开头声明两个变量的地方:

        var cart = [];
        var Item = function(name, price, count){
            this.name = name
            this.price = price
            this.count = count
        };

这部分也在我的脚本中,属于我要执行的功能:

function addItemToCart(name, price, count){
    for (var i in cart){
        if (cart[i].name === name){
            cart[i].count += count;
            //cart[i].count += count;
            return;
        }
    }
    var item = new Item(name, price, count);
    cart.push(item);
    saveCart();
}

最后3部分代码位于我的<scope> </scope>

预先感谢我能解决此问题的任何帮助。

1 个答案:

答案 0 :(得分:0)

您没有在主范围中定义购物车。您必须在作为addItemToCart函数作用域父级的作用域中定义购物车。

另一种替代方法是使用

window.cart = [];

或者对于node.js

global.cart = [];