0

这是我正在研究的库存系统的开始。基本上,它采用压缩形式包含项目和数量的数组,并将项目输出到项目 div 中。

运行以下不会产生错误:

$('.item_amount').html(collection[itemName].amo);

在选择器之后添加 get() 方法,如下所示:

$('.item_amount').get(i).html(collection[itemName].amo);

产生“$(".item_amount").get(i).html 不是函数”。

这就是该行正在改变的内容:

        <div class="item">
        <img src="" class="item_image"/>
        <div class="item_amount"></div>
    </div>

导致错误的行位于一个 for 循环中,该循环遍历数组中的所有键。然后根据存储在变量“i”中的索引从 item_amount div 中的数组中输出项目数量。for 循环还为数组中的每个项目创建一个对象,并将其放入一个集合对象中。

完整代码如下:

    <body>
    <div class="item">
        <img src="" class="item_image"/>
        <div class="item_amount"></div>
    </div>

    <div class="item">
        <img src="" class="item_image"/>
        <div class="item_amount"></div>
    </div>

    <div class="item">
        <img src="" class="item_image"/>
        <div class="item_amount"></div>
    </div>

<script type="text/javascript">
    var collection = new Object(); 

    function makeItem(itemName, id, amo) {
        collection[itemName] = new item(id, amo); 
    }

    function item(id, amo) { 
        this.id = id;
        this.amo = amo;

    }


    var inventoryCom = "368.9,366.15,384.32"; //compressed inventory
    var inventoryArr = inventoryCom.split(','); 

    for(var i=0; i < inventoryArr.length; i++) {

        var itemName = 'item' + (i + 1); //unique name for each item
        var itemArr = inventoryArr[i].split('.'); 

        makeItem(itemName, itemArr[0], itemArr[1]); 


        $('.item_amount').get(i).html(collection[itemName].amo);
           }

</script>

</body>
4

2 回答 2

1

.get(i)返回没有.html()方法的 DOM 元素——这就是 js 引擎想要对你说的。

你需要.eq(i)改用。喜欢

$('.item_amount').eq(i).html(collection[itemName].amo);

或者

$('.item_amount:eq(' + i + ')').html(collection[itemName].amo);
于 2012-07-12T05:18:45.097 回答
0

这条线可能有问题

 var itemName = 'item' + (i + 1); // 

这可能会使数组计数超出上限。检查 itemName 值。

也尝试为此添加警报

 collection[itemName].amo
于 2012-07-12T05:20:02.233 回答