Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-06-2016, 10:03   #1
cdtux
Member
 
L'Avatar di cdtux
 
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 codice così scritto aggiunge/elimina correttamente le righe.
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
    });
In questo modo non si creano doppioni, ma mi si sballa la numerazione visto che non è più progressiva.

Dopo questa estenuante () spiegazione, vi pongo il mio quesito:
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
Immagini allegate
File Type: png Senzanome.png (10.3 KB, 1 visite)
cdtux è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2016, 11:33   #2
les2
Senior Member
 
L'Avatar di les2
 
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
les2 è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2016, 12:37   #3
cdtux
Member
 
L'Avatar di cdtux
 
Iscritto dal: Nov 2015
Messaggi: 67
Quote:
Originariamente inviato da les2 Guarda i messaggi
si, usi doppio id/contatore
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;
}
cdtux è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Mercato smartphone in caduta libera: -20...
Android 17 QPR3 Beta 3 riporta il blocco...
Le 10 offerte TOP in Amazon del weekend:...
Dyson, doppio crollo su Amazon: purifica...
Il 70% delle imprese non vede effetti de...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v