Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
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


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Rocket Lab ha posticipato il lancio del ...
Dalla missione Artemis IV il razzo spazi...
Una delle sonde europee di ESA Proba-3 h...
Un modder fa girare Linux su PS5: GTA V ...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Muffa in casa? Questo deumidificatore da...
Sonos Era 100: il punto d'ingresso per u...
"Non stiamo sostituendo nessuno con...
Tutti i robot in offerta ora: prezzi bas...
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: 00:51.


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