如何选择具有相同名称的所有输入并按名称对其进行索引

我必须处理由第三部分生成的表单。 此表单提供了一些复选框“多选”属性。 但是输入名称是相同的,并且PHP $ _POST无法处理相同的键(仅处理最后一个数据)。

以下是表单的示例:

我想解析所有复选框输入,只获取相同名称输入的组,并在其名称后附加“[]”…

我想在jQuery处理后得到什么:

 

有没有办法识别具有相同名称的输入组?

如果存在具有相同名称的另一个项目,则会将[]附加到每个复选框项的名称。

 var name_map = {}; $("input[type=checkbox]") // for all checkboxes .each(function() { // first pass, create name mapping var name = this.name; name_map[name] = (name_map[name]) ? name + "[]" : name; }) .each(function() { // replace name based on mapping this.name = name_map[this.name]; }); 

演示: http : //jsfiddle.net/gnfsG/

试试这个:

 var group = $('input[name="attr1"]'); if (group.length > 1){ group.each(function () { $(this).attr("name",$(this).attr("name")+"[]"); }); } 

在您的情况下,您将需要使用$('input[name^="attr"]') 。 因为你的物品有attr1attr2attr3等。上面的选择器将匹配所有。

你可以在行动中查看这个@ http://jsfiddle.net/cT78Y/2/

 $('input[name^="attr"]:checkbox').each(function(i){ $(this).attr("name",$(this).attr("name")+"[]"); }); 

这会给你。

 

希望这对你有所帮助。

这是一个很长的解决方案

 var array =[]; $('input[type="checkbox"]').each(function(){ array.push($(this).attr('name')); }); var sorted_arr = array.sort(); // You can define the comparing function here. // JS by default uses a crappy string compare. var results = []; for (var i = 0; i < array.length - 1; i++) { if (sorted_arr[i + 1] == sorted_arr[i]) { results.push(sorted_arr[i]); } } var names = []; names = jQuery.unique(results); $.each(names ,function(key,value){ $('input[name ="'+value+'"]').attr("name",value+"[]"); }); 
 $("input[name=attr\\[\\]]"); 

获取name = attr[]所有输入