I need to use "type=action" button to increase / decrease a hidden Input in a repeating section, and I fail to get my script to work. I read on wiki that an action buttons should not have underscores in their names. Except that, to reference it, I have to use "repeating_id_buttonname" format. Is it the cause of my troubles ? If it is the case, is there a way around it or should I find another way ? Thx for any help, Kord Here is an example of one of my repeating sections : <fieldset class="repeating_vigspecs"> <!-- Skills Vigueur --> // removed lines non related to my problem (roll buttons that works) <div class="right"> <input type="hidden" name="attr_vigspec" class="smallnumber shortnumber" min = "0" value="9"/> <!-- hidden value to upgrade --> <button type="action" name="act_vigspecinc" class="incdec">+</button> <!-- action button +1, does not work --> <button type="action" name="act_vigspecdec" class="incdec">-</button> <!-- action button -1, does not work --> <input type="number" name="attr_vigspecdice" class="nonumber shortnumber" readonly="true" />D+ <!-- Calculated value updated by worker script, works fine--> <input type="number" name="attr_vigspecpip" class="nonumber shortnumber" readonly="true" /> <!-- Calculated value updated by worker script, works fine --> </div> </fieldset> Here is the code handling the buttons : const increase = (attribute, max = 99) => { // increase attribute by 1 up to max (99 if unspecified) value getAttrs([attribute], function (values) { var update = {}; const score = parseInt(values[attribute], 10)||0; // extrait la valeur de l'attribut, en décimal if (score < max) {update[attribute] = score + 1;} // augmente de 1, si la valeur max n'est pas atteinte (99 par défaut) else {update[attribute] = max;} // sinon force à la valeur max, ce qui rattrape un overshoot setAttrs(update); }); }; const decrease = (attribute, min = 0) => { // decrease attribute by 1 up to min (0 if unspecified) value getAttrs([attribute], function (values) { var update = {}; const score = parseInt(values[attribute], 10)||0; // extrait la valeur de l'attribut, en décimal if (score > min) {update[attribute] = score - 1;} // réduit de 1, si la valeur min n'est pas atteinte (0 par defaut) else {update[attribute] = min;} // sinon force à la valeur min, ce qui rattrape un undershoot setAttrs(update); }); }; const skills = { // Object collecting arrays of skills, indexed by stat vig: ['athl','lutt','pui','res'], agi: ['acro','melee','disc','equi','esq'], coord: ['arm','arti','attel','lanc','larc'], esp: ['comm','cult','ling','meca','med','ori'], per: ['arts','debr','jeu','obs','pist','surv'], aura: ['blu','cmd','crg','degu','pss','sed'], }; const maxstat = 30; const minstat = 3; const maxskill = 24; const maxspec = 24; const minspec = 9 /* Handling action buttons for stats ans skills - WORKS FINE */ Object.keys(skills).forEach(stat => { // convert the skills into an array (of stats), and loop through them on(`clicked:${stat}inc`, function () { // sur clic des boutons "+": act_viginc, act_agiinc, etc... increase(stat, maxstat); }); on(`clicked:${stat}dec`, function () { // sur clic des boutons "-": act_vigdec, act_agidec, etc... decrease(stat, minstat) }); }); Object.keys(skills).forEach(stat => { // convert the skills into an array (of stats), and loop through them const skills_handled = skills[stat]; // get the array of skills inside each master stat skills_handled.forEach(skill => { on(`clicked:${skill}inc`, function () { // sur clic des boutons "+": act_athlinc, act_luttinc, etc... increase(skill, maxskill); }); on(`clicked:${skill}dec`, function () { // sur clic des boutons "-": act_athldec, act_luttdec, etc... decrease(skill); }); }); }); /* Handling action buttons in repeating section - DOES NOT WORK */ Object.keys(skills).forEach(stat => { // convert the skills into an array (of stats), and loop through them getSectionIDs('repeating_' + stat + 'specs', function (idarray) { const specs_handled = []; for (let i = 0; i < idarray.length; i++) { specs_handled.push('repeating_' + stat + 'specs_' + idarray[i] + '_' + stat + 'spec'); // met les valeurs des repeating specs existants avec l'id } specs_handled.forEach(spec => { on(`clicked:${spec}inc`, function () { // sur clic des boutons "+": repeating_[stat]specs_[id]_[stat]specinc, etc... increase(spec, maxspec); }); on(`clicked:${spec}dec`, function () { // sur clic des boutons "-": repeating_[stat]specs_[id]_[stat]specdec, etc... decrease(spec, minspec); }); }); }); });