Torna indietro   Hardware Upgrade Forum > Software > Programmazione

4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso
Titan Army P2712V è un monitor da 27 pollici che unisce due anime in un unico prodotto: da un lato la qualità visiva del 4K UHD a 160 Hz, dall'altro la velocità estrema del Full HD a 320 Hz. Con pannello Fast IPS, HDR400, Adaptive-Sync, illuminazione RGB e regolazioni ergonomiche, punta a soddisfare sia i giocatori competitivi che i content creator
OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla
OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla
OPPO Watch X2 Mini è uno smartwatch compatto capace di offrire un'esperienza completa di monitoraggio della salute e fitness con una cassa da 43 mm che può adattarsi a qualsiasi tipo di polso, dal più grande al - soprattutto - più piccolo. Con l'architettura dual-chip e un'autonomia che può coprire due giorni con tranquillità, rappresenta la soluzione ideale per chi cerca prestazioni premium in un formato ridotto.
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione
Dopo il recente lancio della serie Xiaomi 15T di Monaco, vi parliamo oggi della versione più performante della nuova famiglia, ovvero Xiaomi 15 T Pro. Vi raccontiamo la nostra prova nel dettaglio, spiegando perché a questo prezzo e in questa fascia, questo smartphone ha davvero senso tenerlo in seria considerazione.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-06-2016, 09: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, 10: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, 11: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


4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla OPPO Watch X2 Mini, lo smartwatch compatto a cui...
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione Xiaomi 15T Pro, è lui il nuovo best buy? ...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Realme celebra Game of Thrones con un nu...
Samsung Neo QLED 4K da 55'', offerta bom...
Iveco fornirà 129 minibus elettri...
Sbarter cambia le sfide nei videogiochi:...
Black Ops 6 gratuito nella settimana di ...
Rivian, più consegne che produzio...
40 aziende europee firmano contro Chat C...
Chrome: l'IA adesso controlla e revision...
Ionity lancia due nuovi abbonamenti per ...
Facebook cambia l'algoritmo dei Reels: e...
Higo è la scommessa 'smart' di Eu...
Corea del Nord accusata di aver rubato o...
Il PC portatile Lenovo IdeaPad Slim 5 co...
Antonio Felix Da Costa si unisce a Jagua...
Record mondiale di efficienza per le cel...
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: 16:53.


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