|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2015
Messaggi: 67
|
[JQuery + HTML] Problema aggiunta/rimozione dinamica campi form
Buongiorno
Ho un problema con la gestione dinamica di alcuni campi di un form (aggiunta+rimozione). In sostanza devo aggiungere/rimuovere delle "righe" con diversi campi che devono numerati e, ogni "riga" aggiunta/rimossa (oltre a quella presente di default), deve avere una numerazione univoca e progressiva. Faccio un esempio per spiegarmi meglio: l'ID del primo campo (input) della riga di default è: bmpos[0][id_bid] Ogni riga aggiunta rimossa deve avere l'ID = bmpos[x][id_bid], dove x è un valore univoco. Quando il form viene inviato devo ottenere un array tipo: Codice HTML:
array (size=2) '_token' => string 'STRINGAACASACCIO' (length=40) 'bmpos' => array (size=3) 0 => array (size=2) 'id_bid' => string '5' (length=1) 'pos' => string 'A' (length=1) 1 => array (size=2) 'id_bid' => string '5' (length=1) 'pos' => string 'B' (length=1) 2 => array (size=2) 'id_bid' => string '5' (length=1) 'pos' => string 'C' (length=1) Uno screen del form lo trovate in allegato. Di seguito il codice che del form e lo script: Codice HTML:
<div class="input_fields_wrap3"> <!-- Start Dynamic Wrapper --> <div id="row1"> <!-- Start Dynamic Container --> <div> <!-- Start Dynamic Row --> <div> <input id="bmpos[0][id_bid]" name="bmpos[0][id_bid]" type="hidden" value="5"> </div> <div> <input type="text" name="bmpos[0][pos]" id="bmpos[0][pos]" value="A" /> </div> <div> <button class="add_pos_button3">add</button> </div> </div> <!-- END Dynamic Row --> </div> <!-- END Dynamic Container --> </div> <!-- END Dynamic Wrapper --> Codice:
$(document).ready(function() { var max_fields = 10; //maximum input boxes allowed var wrapper = $(".input_fields_wrap3"); //Fields wrapper var add_button = $(".add_pos_button3"); //Add button var x = 0; //initlal box count var pos = 'A'; //initlal pos value $(add_button).click(function(e){ //on add input button click e.preventDefault(); if(x < max_fields){ //max input box allowed x++; //box increment pos = String.fromCharCode(pos.charCodeAt() + 1); //increment pos value $(wrapper).append('<div id="row'+x+'"><div style="border: 1px solid;"><div><input id="bmpos['+x+'][id_bid]" name="bmpos['+x+'][id_bid]" type="hidden" value="5"></div><div><input type="text" name="bmpos['+x+'][pos]" id="bmpos['+x+'][pos]" value="'+pos+'" /></div><div><a href="#" class="remove_field3">delete</a></div></div></div>'); //add input box } }); $(wrapper).on("click",".remove_field3", function(e){ //user click on remove text e.preventDefault(); $(this).parent('div').parent('div').parent('div').remove(); x--; //decrement box pos = String.fromCharCode(pos.charCodeAt() - 1); //decrement pos value }); }); Il problema si presenta quando elimini una riga intermedia (la pos B dello screen) e successivamente ne aggiungi un'altra: la riga aggiunta ha i medesimi valori dell'ultima riga inserita (pos C dello screen). Per ovviare a questo inconveniente ho modificato la funzione remove del JS togliendo la parte in cui si decrementano i contatori: Codice:
$(wrapper).on("click",".remove_field3", function(e){ //user click on remove text e.preventDefault(); $(this).parent('div').parent('div').parent('div').remove(); //x--; <---- ELIMINATA //pos = String.fromCharCode(pos.charCodeAt() - 1); <-------- ELIMINATA }); Dopo questa estenuante ( ![]() Secondo voi è possibile, una volta eliminata una riga (sia intermedia o l'ultima), ricrearla/ripristinarla con gli stessi valori e nella stessa posizione, al click del tasto aggiungi?? A grandi linee come dovrei procedere per fare ciò?? Grazie per l'attenzione |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2001
Città: MI
Messaggi: 1801
|
si, usi doppio id/contatore
![]()
__________________
italiarec.com forum italiano di registrazione e mixaggio estilocaballero.es ssdoptimizer.eu cambioeuro.eu doflamingo.com studiolegalesangalli.com stilegentiluomo.it italiarec.com italiarec.it arteincasa.it |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Nov 2015
Messaggi: 67
|
Prima di tutto grazie per la risposta
![]() Però non ho ben capito cosa intendi per doppio id/contatore. Puoi spiegarti meglio?? Comunque per il momento ho risolto (anche se non mi sembra una soluzione tanto "pulita") la parte dei doppioni nel nome delle posizioni: Ho aggiunto una variabile stringa in cui vengono inserite tutti valori delle posizioni. Nel pulsante add con una funzione controllo quale manca e la reinserisco (se è stata eliminata), altrimenti incremento il contatore "pos". Nel pulsante remove reperisco il valore e lo elimino dalla stringa. Se è stata eliminata l'ultima voce decremento il contatore "pos". questa è la funzione di check della stringa: Codice:
function checkLetter(str) { var difference; var missing; for (var i = 1; i < str.length; i++) { difference = str.charCodeAt(i) - str.charCodeAt(i - 1); if (difference > 1) { missing = str.charCodeAt(i) - 1; return String.fromCharCode(missing); } } return null; } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:07.