Je dois manipuler un formulaire généré par une troisième partie. Ce formulaire fournit des attributs de case à cocher "à sélection multiple". Mais le nom de l'entrée est identique et PHP $ _POST ne peut pas gérer des clés identiques (seules les dernières données sont traitées).
Voici un exemple de formulaire:
<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>
J'aimerais analyser toutes les entrées de case à cocher, obtenir uniquement les entrées du même nom et ajouter "[]" à leur nom ...
Ce que je veux obtenir après le traitement 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>
Existe-t-il un moyen d'identifier un groupe d'entrées portant le même nom?
Ceci ajoutera []
au nom de chaque élément de case à cocher s'il existe un autre élément portant le même nom.
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];
});
Essaye ça:
var group = $('input[name="attr1"]');
if (group.length > 1){
group.each(function () {
$(this).attr("name",$(this).attr("name")+"[]");
});
}
Vous devrez utiliser $('input[name^="attr"]')
dans votre cas. Comme vos articles ont attr1
, attr2
, attr3
etc. Le sélecteur ci-dessus correspond à tous.
Vous pouvez vérifier cela en action @ http://jsfiddle.net/cT78Y/2/
$('input[name^="attr"]:checkbox').each(function(i){
$(this).attr("name",$(this).attr("name")+"[]");
});
Cela vous donnera.
<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>
J'espère que cela vous aide.
$("input[name=attr\\[\\]]");
obtenir toutes les entrées où nom = attr[]
C'est une très longue solution
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+"[]");
});