2013-04-23 9 views
97

現在チェックされているすべてのチェックボックスの値を取得して配列に格納しようとしています。これまでのコードはこれまで通りです:jQueryチェックボックスの値を配列に取得する

$("#merge_button").click(function(event){ 
    event.preventDefault(); 
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){ 
     return $(this).val(); 
    }); 
    console.log(searchIDs); 
    }); 

しかし、これは私が必要以上に出力します。私は値を得るだけでなく、私が欲しくないいくつかの他のものを得る。

[ "51729b62c9f2673e4c000004"、 "517299e7c9f26782a7000003"、 "51729975c9f267f3b5000002"、prevObject:jQuery.fn.jQuery.init [3]、 文脈:文書、jQueryの "1.9.1"、コンストラクタ:関数init: function ...]

私はちょうどIDの(この場合は最初の3つのアイテム)を希望します。 I「はしかし

$("#find-table input:checkbox:checked").each(function(){ myArray.push($(this).val()); }) 

[ "51729b62c9f2673e4c000004"、 "517299e7c9f26782a7000003"、 "51729975c9f267f3b5000002"]

$.eachを使用して、アレイIが所望得る出力に値を押すことにより

dは$.mapを使用するのが好きです。なぜなら、それは私にコードの行を節約し、よりきれいであるからです。真に結果のjQueryオブジェクトをオンにする非常に終わりhttp://jsfiddle.net/sZQtL/

答えて

200

コール.get():あなたはあなたの.map()機能

$("#merge_button").click(function(event){ 
    event.preventDefault(); 
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){ 
     return $(this).val(); 
    }).toArray(); 
    console.log(searchIDs); 
}); 

デモの最後に.toArray()を追加する必要が

おかげ

+1

私は '$ .map'の真の配列を期待していました。ソリューションをありがとう、それは動作します。 –

+0

ありがとう、私はこれをmaに必要としていますTicketcenter – Steven

+2

私はこれについては分かりませんが、 '.get()'が必要な理由は、関数が '.val()'を返すときです。 jQueryコレクション。これは 'map'が' searchIDs'に渡す前にjQueryオブジェクトに戻すためですか? – iconoclast

14

アレイ。 the documentationパー

$("#merge_button").click(function(event){ 
    event.preventDefault(); 
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){ 
     return $(this).val(); 
    }).get(); // <---- 
    console.log(searchIDs); 
}); 

:戻り値として

は、配列、それが基本的な配列で動作するように結果に()に.getを呼び出すことは非常に一般的ですが含まれているjQueryオブジェクト、です。

9

私はあなたのコードを少しリファクタリングし、私があなたが探していた解決策と一緒に来たと信じています。基本的にsearchIDs.map()の結果に設定する代わりに、値を配列にプッシュしました。

$("#merge_button").click(function(event){ 
    event.preventDefault(); 

    var searchIDs = []; 

    $("#find-table input:checkbox:checked").map(function(){ 
    searchIDs.push($(this).val()); 
    }); 

    console.log(searchIDs); 
}); 

コードを実行してfiddleを作成しました。

+0

これは基本的にOPが彼/彼女の質問に正しいとしているものです... –

18

DEMO:http://jsfiddle.net/PBhHK/

$(document).ready(function(){ 

    var searchIDs = $('input:checked').map(function(){ 

     return $(this).val(); 

    }); 
    console.log(searchIDs.get()); 

}); 

ジャスト(取得を呼び出し)、それは仕様に書かれているようにあなたの配列を持っています:http://api.jquery.com/map/

$(':checkbox').map(function() { 
     return this.id; 
    }).get().join(); 
0

は "それぞれ" を使用しないでください。同じ要素の操作や変更に使用されます。 "マップ"を使用して、要素本体からデータを抽出し、それを他の場所で使用します。

+1

これには良い例があります –

+0

jQueryのドキュメントには、 'map' – jinglesthula

0

フォームが実際に提出されたかのように、javascriptオブジェクトの配列になるように、HTMLで指定されたフォーム要素を配列として必要としました。

のような複数のチェックボックスを持つフォームがある場合:

<input name='breath[0]' type='checkbox' value='presence0'/> 
<input name='breath[1]' type='checkbox' value='presence1'/> 
<input name='breath[2]' type='checkbox' value='presence2'/> 
<input name='serenity' type='text' value='Is within the breath.'/> 
... 

は結果が持つオブジェクトです:

data = { 
    'breath':['presence0','presence1','presence2'], 
    'serenity':'Is within the breath.' 
} 


var $form = $(this), 
    data = {}; 

$form.find("input").map(function() 
{ 
    var $el = $(this), 
     name = $el.attr("name"); 

    if (/radio|checkbox/i.test($el.attr('type')) && !$el.prop('checked'))return; 

    if(name.indexOf('[') > -1) 
    { 
     var name_ar = name.split(']').join('').split('['), 
      name = name_ar[0], 
      index = name_ar[1]; 

     data[name] = data[name] || []; 
     data[name][index] = $el.val(); 
    } 
    else data[name] = $el.val(); 
}); 

そして、私のコードを改善する助けここでの回答のトンがありますが、彼らはあまりにも複雑すぎるか、まさに私が欲しかったことをしていませんでした:Convert form data to JavaScript object with jQuery

作品は改善できます:1次元配列でしか機能しませんsultingインデックスが連続していない可能性があります。配列のlengthプロパティは、実際の長さではなく、配列の長さとして次のインデックス番号を返します。

これが役に立った。ナマステ!

3
 var ids = []; 

$('input[id="find-table"]:checked').each(function() { 
    ids.push(this.value); 
}); 

この1つは私のために働いた!

関連する問題