3

我正在尝试将值添加到一个简单的数组中,但我无法将值推送到数组中。

到目前为止一切顺利,这是我拥有的代码:

codeList = [];

jQuery('a').live(
    'click', 
    function()
    {
         var code = jQuery(this).attr('id');
         if( !jQuery.inArray( code, codeList ) ) {
              codeList.push( code );
              // some specific operation in the application
         }   
    }
);

上面的代码不起作用!但是如果我手动传递值:

codeList = [];

jQuery('a').live(
    'click', 
    function()
    {
         var code = '123456-001'; // CHANGES HERE
         if( !jQuery.inArray( code, codeList ) ) {
              codeList.push( code );
              // some specific operation in the application
         }   
    }
);

有用!

我不知道这里发生了什么,因为如果我手动进行其他测试,它也可以工作!

4

2 回答 2

4

试试这个..而不是检查它的索引的布尔检查..它在找不到时返回-1..

var codeList = [];

jQuery('a').live(
    'click', 
    function()
    {
         var code = '123456-001'; // CHANGES HERE
         if( jQuery.inArray( code, codeList ) < 0) { // -ve Index means not in Array
              codeList.push( code );
              // some specific operation in the application
         }   
    }
);
于 2012-09-21T16:07:27.450 回答
3

jQuery.inArray-1当找不到该值时返回,.live在 jQuery 1.7+ 上也不推荐使用,并且您的var声明中缺少一条语句codeList。这是您的代码的重写:

//without `var`, codeList becomes a property of the window object
var codeList = [];

//attach the handler to a closer ancestor preferably
$(document).on('click', 'a', function() {
    //no need for attributes if your ID is valid, use the element's property
    var code = this.id;
    if ($.inArray(code, codeList) === -1) { //not in array
        codeList.push(code);
    }
});

小提琴

正如我在问题评论中所说,以数字开头的 ID 是非法的,除非您使用的是 HTML5 文档类型。

于 2012-09-21T16:09:25.940 回答