Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    82

    Jquery - Problema funzione each

    Salve a tutti.
    Tramite un ciclo while php tiro fuori una serie di record che visualizzo in una tabella.
    Per ogni riga della tabella è previsto un button Modifica: cliccando sul tasto modifica la tabella sparisce ed appare il form di modifica di quel record specifico. Il tutto avviene tramite una funzione JQuery.
    Il problema sta nel fatto che su qualsiasi tasto di ogni riga io clicchi, nel form di modifica mi appare sempre e soltanto il primo record del ciclo. In pratica il button fa sempre riferimento al primo id e non segue il ciclo dei dati.
    La funzione JQuery è la seguente:

    codice:
    $(document).ready(function() { 
        $('.bt_modifica').each(function() {
            $(this).click(function(){ 
                $('#tbl_visualizza').hide();
                $('#div_modifica').show();
                var id = $(".idrecord").val(); 
                //chiamata ajax
                $.ajax({
                    type: "POST",
                    url: "modifica.php",
                    data: "id=" + id,
                    dataType: "html",
             
                    success: function(msg) {
                        $("#div_modifica").html(msg); 
                    },
                    error: function() {
                        alert("Impossibile estrarre il record"); 
                    }
                });
            });
        });
    });
    Qualcuno mi aiuta a capire dove sbaglio??? Grazie......

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, dovresti rivedere meglio la logica di funzionamento.
    Tieni presente che il metodo click() è un gestore di evento (quindi funziona in modo asincrono). Questo significa che tutto lo script, dentro la funzione su click, viene visto/letto/eseguito solo quando accade tale evento, mentre durante il ciclo non viene considerato.
    La variabile id (se è questo ciò a cui ti riferisci) sta dentro click ed è correttamente popolata perché il metodo val() restituisce il valore del primo elemento trovato dal selettore.

    Ora, cosa dovrebbe rappresentare $(".idrecord")? E che relazione ha con i corrispettivi $('.bt_modifica')?
    Se c'è una qualche relazione di parentela, potresti usare dei selettori di tipo gerarchico.

    Non vedendo la parte HTML non si capisce come hai impostato la cosa, quindi non ti si può consigliare più di tanto.

    Puoi postare un link alla pagina pubblica o postare la parte HTML in questione e indicare meglio cosa ti serve ottenere?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    82
    Innanzitutto grazie per la risposta e perdonami se ho postato informazioni poco complete.
    Dunque la parte HTML è la seguente:

    codice:
    <?php QUERY ESTRAZIONE DATI ?>
    
    <table id="tbl_visualizza">
        <caption>ESTRATTO CONTO</caption>
            
        <tr>
            <td class="medium"></td>
            <td class="medium">Numero Pratica</td>>
            <td class="medium">Data emissione</td>
            <td class="small">Costo Spedizione</td>
            <td class="small">Costo Totale</td>
            <td class="medium">Data fattura</td>    
        </tr>
    
        <?php
        while($rs = mysql_fetch_assoc($query)) {
        LETTURA DATI DAL DB
        ?>
    
        <tr>
            <td>
            <a class="bt_modifica" href="#">Modifica pratica</a>
            <input type="hidden" name="idrecord" class="idrecord" value="<?php echo $id; ?>" />
            </td>
            <td><?php echo $numero_pratica; ?></td>
            <td><?php echo $data_emissione; ?></td>
            <td><?php echo $costo_spedizione; ?></td>
            <td><?php echo $costo_totale; ?></td>
            <td><?php echo $data_fattura; ?></td>
        </tr>
        <?php
        } // chiudo while
        ?>
    </table>
    
    <div id='div_modifica'>
    VISUALIZZO IL FORM DI MODIFICA
    </div>
    Come dicevo per ogni riga della tabella (che rappresenta un record) c'è il link modifica (prima c'era un button ma non mi piaceva e ho messo del testo in un link, non credo cambi qualcosa) che nasconde la tabella e mostra il form di modifica del record. Solo che come detto cliccando su Modifica Pratica di qualsiasi riga nel form mi appare sempre e solo il primo record (cioè i dati della prima riga della tabella)
    Spero che ora la situazione sia più chiara. Purtroppo sono pagine che girano in locale, non sono online. Se hai bisogno di ulteriori info dimmi pure.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Probabilmente questo id non cambia <input type="hidden" name="idrecord" class="idrecord" value="<?php echo $id; ?>" /> nel ciclo ergo è un problema php
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    82
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Probabilmente questo id non cambia <input type="hidden" name="idrecord" class="idrecord" value="<?php echo $id; ?>" /> nel ciclo ergo è un problema php
    Ciao.
    No, ho reso visibile il campo e l'id cambia. Lato php è tutto ok

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ok, rendi questo id="idrecord" univoco aggiungendoci o un numero consecutivo oppure id stesso del recordset
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    82
    Grazie ad entrambi per il prezioso aiuto. Ho compreso la logica del problema e proverò ad applicare una delle soluzioni suggerite. Vi farò sapere!!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    82
    Dunque, con .find non riesco, probabilmente per la troppa fretta. Per il momento ho risolto così, magari serve a qualcuno:

    <a class="bt_modifica" href="#" id=<?php echo $id; ?>>Modifica</a>

    var id = $(this).attr("id");

    Era facile ma senza i vostri suggerimenti chissà quanto tempo ci avrei perso. Comunque con calma proverò entrambe le soluzioni da voi suggerite, tutto torna utile nel tempo!!!!
    Grazie mille!!!!!

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    A mio parere puoi lasciare la parte PHP/HTML così come era e, su jQuery, giocare semplicemente con qualche selettore gerarchico, come suggerito sul mio precedente post.

    Dato che hai questa situazione:
    codice:
            <a class="bt_modifica" href="#">Modifica pratica</a>
            <input type="hidden" name="idrecord" class="idrecord" value="<?php echo $id; ?>" />
            </td>
    ... (su ogni td) gli elementi bt_modifica e idrecord sono "fratelli", quindi potresti utilizzare il selettore sibling in questo modo:
    codice:
    var id = $("~.idrecord",this).val();
    Posto un esempio pratico giusto per chiarire:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script type="text/javascript">
          $(function(){
            $('.bt_modifica').click(function(event){
              event.preventDefault();
              $('#tbl_visualizza').hide();
              $('#div_modifica').show();
              var id = $("~.idrecord",this).val();
                  
              alert(id);
              
              //chiamata ajax
              // ecc...
            });
          })
        </script>
      </head>
      <body>
        <table>
          <tr>
            <td>
              <a class="bt_modifica" href="#">Modifica pratica</a>
              <input type="hidden" name="idrecord" class="idrecord" value="1" />
            </td>
          </tr>
          <tr>
            <td>
              <a class="bt_modifica" href="#">Modifica pratica</a>
              <input type="hidden" name="idrecord" class="idrecord" value="2" />
            </td>
          </tr>
          <tr>
            <td>
              <a class="bt_modifica" href="#">Modifica pratica</a>
              <input type="hidden" name="idrecord" class="idrecord" value="3" />
            </td>
          </tr>
        </table>
      </body>
    </html>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.