Как выбрать все входы с одинаковым именем и индексировать их по имени
Мне нужно обработать форму, сгенерированную третьей частью. Эта форма предоставляет некоторые флажки "multi-select" атрибуты. Но имя ввода идентично, и PHP $_POST не может обрабатывать одинаковые ключи (обрабатываются только последние данные).
Вот пример формы:
<form>
<input type="checkbox" name="attr1" value="1" />
<input type="checkbox" name="attr1" value="2" />
<input type="checkbox" name="attr1" value="3" />
<input type="checkbox" name="attr1" value="4" />
<input type="checkbox" name="attr2" value="xx" />
<input type="checkbox" name="attr3" value="a" />
<input type="checkbox" name="attr3" value="b" />
<input type="checkbox" name="attr3" value="c" />
<input type="checkbox" name="attr3" value="d" />
<input type="text" name="attr4" value="" />
</form>
Я хотел бы проанализировать все входные флажки, получить только группу с одинаковыми именами и добавить "[]" к их имени...
Что я хочу получить после обработки jQuery:
<form>
<input type="checkbox" name="attr1[]" value="1" />
<input type="checkbox" name="attr1[]" value="2" />
<input type="checkbox" name="attr1[]" value="3" />
<input type="checkbox" name="attr1[]" value="4" />
<input type="checkbox" name="attr2" value="xx" />
<input type="checkbox" name="attr3[]" value="a" />
<input type="checkbox" name="attr3[]" value="b" />
<input type="checkbox" name="attr3[]" value="c" />
<input type="checkbox" name="attr3[]" value="d" />
<input type="text" name="attr4" value="" />
</form>
Есть ли способ идентифицировать группу входов с таким же именем?
Ответы
Ответ 1
Это добавит []
к имени каждого элемента флажка, если существует другой элемент с тем же именем.
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/
Ответ 2
Попробуйте следующее:
var group = $('input[name="attr1"]');
if (group.length > 1){
group.each(function () {
$(this).attr("name",$(this).attr("name")+"[]");
});
}
Ответ 3
Вам нужно будет использовать $('input[name^="attr"]')
в вашем случае. Поскольку ваши элементы имеют attr1
, attr2
, attr3
и т.д. Вышеприведенный селектор будет соответствовать всем.
Вы можете проверить это в действии @http://jsfiddle.net/cT78Y/2/
$('input[name^="attr"]:checkbox').each(function(i){
$(this).attr("name",$(this).attr("name")+"[]");
});
Это даст вам.
<form>
<input type="checkbox" name="attr1[]" value="1">
<input type="checkbox" name="attr1[]" value="2">
<input type="checkbox" name="attr1[]" value="3">
<input type="checkbox" name="attr1[]" value="4">
<input type="checkbox" name="attr2[]" value="xx">
<input type="checkbox" name="attr3[]" value="a">
<input type="checkbox" name="attr3[]" value="b">
<input type="checkbox" name="attr3[]" value="c">
<input type="checkbox" name="attr3[]" value="d">
<input type="text" name="attr4" value="">
</form>
Надеюсь, это поможет вам.
Ответ 4
Это очень длинное решение
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+"[]");
});
Ответ 5
$("input[name=attr\\[\\]]");
получить все входные данные, где name = attr[]