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);
    }
});

フィドル

質問のコメントで述べたように、HTML5 doctype を使用していない限り、数字で始まる ID は違法です。

于 2012-09-21T16:09:25.940 に答える