将get()添加到行会导致“不是函数”错误

时间:2012-07-12 05:14:25

标签: javascript jquery

这是我正在处理的库存系统的开始。基本上,它采用压缩形式的项目和数量的数组,并将项目输出到项目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>

2 个答案:

答案 0 :(得分:1)

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

您需要使用.eq(i)代替。像

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

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

答案 1 :(得分:0)

此行可能有问题

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

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

还尝试为此

添加提醒
 collection[itemName].amo