Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    Recupero valore elemento creato al volo

    Ho una tabella:

    Codice PHP:
    <tr>
        <
    td>'.$costo->id_costo.'</td>
        <
    td class="edit" headers="codice_articolo">'.$costo->codice_articolo.'</td>
        <
    td class="edit" headers="tipo_gestione">'.$costo->tipo_gestione.'</td>
        <
    td class="table-actions">[url="edit"]Modifica[/url]</td>
    </
    tr
    Quando premo su edit scorro in orizzontale la riga e al posto del contenuto di ogni cella con class="edit" creo l'input relativo, il tutto lato client.
    A questo punto l'aspetto sarà questo:

    Codice PHP:
    <tr>
        <
    td>'.$costo->id_costo.'</td>
        <
    td class="edit" headers="codice_articolo"><input type="text" name="codice_articolo" value="'.$costo->codice_articolo.'" /></td>
        <
    td class="edit" headers="tipo_gestione"><input type="text" name="tipo_gestione" value="'.$costo->tipo_gestione.'" /></td>
        <
    td class="table-actions">[url="save"]Salva[/url]</td>
    </
    tr
    A questo punto premendo su salva vado a cercare tutti gli input della riga, ma di fatto è come se non esistessero.
    In pratica sembra che i tag creati 'al volo' lato client non siano presenti nel dom.

    E' giusto questo? Se sì come posso fare per recuperarli?

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premesso che di javascript e di dom nel tuo post non c'è traccia, tutto quello che generi col dom è recuperabile da javascript e dal server, fermo restando che sia generato correttamente.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Ok confermo che si riesce a recuperare. Il problema infatti è nell'array associativo che ricostruisco per ripassare gli argomenti via ajax al server.

    Codice PHP:
                        if(azione == 'edit') {

                            var primary = $(this).attr('id');

                            // Crea i campi input
                            $.each($(this).closest('tr').children('td.edit'), function() {
                                var value = $(this).html();
                                var name = $(this).attr('headers');
                                $(this).html('<input type="text" value="'+value+'" name="'+name+'" />');
                            });

                            // Modifica i pulsanti
                            var pulsanti_edit = '[url="save"][img]<?php echo $this->baseUrl(); ?>/images/icons/fugue/tick-circle.png[/img][/url]';
                            pulsanti_edit += '[url="discard"][img]<?php echo $this->baseUrl(); ?>/images/icons/fugue/cross-circle.png[/img][/url]';
                            $(this).parent().html(pulsanti_edit);

                            // Salva
                            $('a[href="save"]').click(function(event) {

                                event.preventDefault();

                                var primary_save = $(this).attr('id');

                                var arguments = new Array();
                                arguments["action"] = "save";

                                $.each($(this).closest('tr').children('td.edit'), function() {
                                    var value = $(this).children('input').val();
                                    var name = $(this).attr('headers');
                                    arguments["name"] = value;
                                    alert(name);
                                    
                                    console.debug(arguments);
                                });
                                alert(arguments["name"]);
                                
                                console.debug(arguments);
                                
                                
                            });
                        }
    Spiego velocemente cosa fa: al click di EDIT trasforma il contenuto delle celle in input associando il nome e il valore e cambiando il pulsante da EDIT a SALVA. Al click del salva scorre gli input di tutte le celle e recupera name e value e li inserisce nell'array associativo che successivamente dovrò utilizzare per aggiornare il database via ajax.
    Il problema è name e value nello scorrere degli input risulta corretto, mentre l'array al di fuori della funzioni each risulta con il solo contenuto definito prima del ciclo.
    Ho appositamente dichiarato l'array al di fuori del ciclo each affinchè sia disponibile a livello globale, ma così non è!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Trovato il problema. Utilizzavo 'arguments' come variabile che deduco sia una parola chiave. Da qui tutti i problemi.
    Ho fatto così ad esempio e funziona:

    Codice PHP:
                            // Salva
                            
    $('a[href="save"]').click(function(event) {

                                
    event.preventDefault();

                                var 
    primary_save = $(this).attr('id');

                                
    //var arguments = new Array();
                                //arguments["action"] = "save";
                                
    var argomenti 'action=save';
                                
    //var argomenti = {'action':'save'}

                                
    $.each($(this).closest('tr').children('td.edit'), function() {
                                    var 
    value = $(this).children('input').val();
                                    var 
    name = $(this).attr('headers');
                                    
    argomenti += '&'+name+'='+value;
                                    
    //arguments['"'+name+'"'] = '"'+value+'"';
                                    //alert(name);
                                    //alert(value);
                                    
                                    
    console.debug(argomenti);
                                });
                                
    //alert(arguments["name"]);
                                
                                
    console.debug(argomenti);
                                
                                
                            }); 

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    se vuoi utilizzare l'array associativo devi fare cosi:

    arguments[name] = value;

    e non cosi

    arguments["name"] = value;

    c'è una bella differenza, cmq si arguments dovrebbe essere una parola chiave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.