チェックボックスとラジオのグループが複数あります。
各グループには一意の名前属性がありますが、これらの名前はわかりません。
各グループを取得し、それらをループして、少なくとも1つの項目がチェックされていることを確認するセレクターを探しています。
明らかに、それぞれを実行して名前を比較し、一意の配列を作成してから配列をループすることができますが、より熟練するために、すべてを1つにまとめて実行したいと思います。提案?
チェックボックスとラジオのグループが複数あります。
各グループには一意の名前属性がありますが、これらの名前はわかりません。
各グループを取得し、それらをループして、少なくとも1つの項目がチェックされていることを確認するセレクターを探しています。
明らかに、それぞれを実行して名前を比較し、一意の配列を作成してから配列をループすることができますが、より熟練するために、すべてを1つにまとめて実行したいと思います。提案?
要素をループして、各グループのカウントをプロパティとしてオブジェクトに保存できます。例:
var names = {};
$(':checkbox').each(function(){
var name = $(this).attr('name');
names[name] = (names[name] || 0) + ($(this).is(':checked') ? 1 : 0);
});
$.each(names, function(i, e){
if (e == 0) {
alert('No checkbox in group ' + i + ' is checked.');
}
});
デモ: http: //jsfiddle.net/d4mTs/
jQuery の :checked セレクターを使用した同様のソリューション (Guffa から分岐)。
var names = {};
$(':checkbox').each(function(){
var name = $(this).attr('name');
if (names[name] == null)
{
var c = $("input[name='" + name + "']:checked").length;
names[name] = c;
if (c == 0)
alert('Not checked: ' + name);
}
});