为什么这个js数组函数不起作用?

时间:2012-01-17 04:22:56

标签: javascript arrays

我正在使用jQuery库,并尝试将项目推送到数组:

< onclick ="setFacet('myarray','val');">AOC

var myarray = [];

function setFacet(arr, bb) {
    for (var i=0; i< arr.length; i++)
        if (arr[i] == bb) 
            return true;

    arr.push(bb);
    return false;
}

我在chrome中得到了这个:

对象myarray没有方法'push'

4 个答案:

答案 0 :(得分:4)

哦,我想我发现了这个问题。在onclick中,您使用两个字符串调用该函数。第一个参数应该是数组而不是'myarray'

如果您只是删除引号(如果myArray在全局范围内),它应该可以工作。也就是说,看起来像这样:

onclick="setFacet(myArray, 'val')"

答案 1 :(得分:2)

更改:

onclick="setFacet('myarray','val')"

onclick="setFacet(myarray)"

然后将函数setFacet更改为以下内容:

function setFacet(arr, bb) {
   for (var i=0; i< arr.length; i++)
       if (arr[i] == bb) return true;

   arr.push(this.innerHTML); /* "this" in the context of the "click" */
                             /* is the element clicked */

   return false;
}

答案 2 :(得分:1)

具有onclick侦听器的元素应为

<...onclick ="setFacet(myarray,'val');">

不应引用myarray,否则将被视为字符串。

答案 3 :(得分:0)

您可以将您的javascript与标记完全分开,只将该值存储为被点击元素(或任何其他元素)的属性

<input type="button" value="someValue">

<script>
  $(function(){
    var myArray = [];

    $('#myEle').click(function(){
      myArray.push($(this).val())
    })
  })
</script>