Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Jq - paginazione di dati matrice a 2 array per volta

    Ciao a tutti, è un po che sto sbattendo la testa su questo problema e non ne vengo fuori al 100%.
    Spiego brevemente:
    tramite una funzione jquery importo da una pagina php una matrice così
    array[0][10campi]
    array[1][10campi]
    array[2][10campi]
    array[3][10campi]
    array[4][10campi]
    ogni array è un evento (gare auto)e i campi sono opzioni di ogni evento.
    Gli eventi possono variare, in questo caso sono 5, ma potrebbero essere 2 o 3 o 8.


    Quello che cerco di fare è stampare in un DIV (sempre lo stesso) i primi 2 array (0 e 1); premendo un pulsante (next) sempre nello stesso div gli array (2 e 3); premendo nuovamente (next) caricare i successivi array (in questo caso 4). Premendo invece un altro pulsnte (prev) caricare gli eventi precedenti al punto in cui sono, se sto visualizzando gli eventi (2 e 3) mi deve caricare (0 e 1) etc
    Ora con un ciclo FOR (i=0;i<array.length;i++)
    -- corpo che mi stampa gli array --
    mi stampa tutti gli eventi.
    aggiungendo un ciclo if nel for gli faccio stampare solo 2 eventi
    if (va < 2) // inizializzando va a 0 fuori dalla funzione
    -- corpo che mi stampa gli eventi --
    va = va + 1


    La funzione fa il suo dovere e mi stampa gli array 0 e 1.
    Il problema è che non so che operazioni far fare ai pulsanti next e prev al loro click perchè non posso andare a modificare i.


    Sbaglio a definire le operazioni della mia funzione?
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, puoi fare in tanti modi.
    Una soluzione potrebbe essere quella di caricare tutte le voci all'interno del tuo div e con jQuery nasconderle tutte inizialmente per poi mostrare sole le due che faranno riferimento ad una certa posizione determinata dai due pulsanti di scorrimento.
    Posto un esempio pratico da cui puoi prendere spunto:
    codice:
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript">
          $(function(){
            var eventi; // Array eventi
            var idscroll; // Indice della prima voce visibile in eventiselezionati
            
            // Funzione di scorrimento delle voci in eventiselezionati
            function scrollEventiSelezionati(skip){
              idscroll = Math.min(parseInt((eventi.length-1)/2)*2,Math.max(0,idscroll+skip));
              $("#eventiselezionati>div").hide().slice(idscroll,idscroll+2).show();
            }
            
            // Simulo il caricamento dei dati e visualizzo i risultati
            $("#caricaeventi").click(function(){
              eventi = [];
              idscroll = 0;
              $("#eventi,#eventiselezionati").html("");
              for (var i=0;i<=parseInt(Math.random()*20)+1;i++){
                  eventi[i] = "Evento "+i;
                  $("#eventi,#eventiselezionati").append("<div>"+eventi[i]+"</div>");
              };
              // Inizializzo la lista in eventiselezionati
              scrollEventiSelezionati(0);
              // Al click sui pulsanti richiamo la funzione di scorrimento
              $("#prev").click(function(){scrollEventiSelezionati(-2)})
              $("#next").click(function(){scrollEventiSelezionati(2)})
            })
          })
        </script>
      </head>
      <body>
        <div style="float:left">
          <input type="button" id="caricaeventi" value="CARICA EVENTI"> &lt;- clicca per simulare il caricamento
          <fieldset style="width:400px;">
            <legend>Tutti gli eventi:</legend>
            <div id="eventi">
            </div>
          </fieldset>
        </div>
        <div style="float:left">
          <fieldset style="width:400px;height:80px">
            <legend>Eventi selezionati:</legend>
            <div id="eventiselezionati">
            </div>
          </fieldset>
          <input type="button" id="prev" value="PREV">
          <input type="button" id="next" value="NEXT">
          &lt;- scorri le voci 2 per volta
        </div>
      </body>
    </html>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Puó essere un idea,senó stasera ragionando ho pensato di cambiare approccio e usare un while.
    i=0;
    funzione()
    c=0;
    while (i<array.length AND c<2){
    corpo dell'evento
    c++;
    i++;}
    Per i pulsanti
    next // richiamo semplicemente la funzione
    prev // faccio un controll su i
    onClick
    if (i > 1){
    i = i - 2;
    } else {
    i = 0; }
    richiamo la funzione
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  4. #4
    Facendo il ciclo while mi visualizza al massimo 4 eventi, dal 5° in avanti non li visualizza, è possibile?
    Ho messo la pagina on line a questo indirizzo
    link

    questo il codice del ciclo
    codice:
    var riempieventi = function() {
    
    var cr = 0;
    var tt_ev = "";
    
    while ((idr < $nv1) && (cr < 2)) {
                tt_ev = tt_ev + (
                    '<div id="session_detail">' +
                    '<div id="img_ev_container">' +
                    '<div class="img_evento" style="background-image: url(' + ardati[idr][3] + ');"></div>' +
                    '<div class="RSRsessionname">' + ardati[idr][0] + "</div>" +
                    '<div class="RSRcarname">Car : ' + ardati[idr][1] + "</div>" +
                    '<div class="RSRtrackname">Track : ' + ardati[idr][2] + "</div>" +
                    "</div>" +
                    '<div id="CollapsiblePanel' + idr + '" class="CollapsiblePanel">' +
                    '<div class="CollapsiblePanelTab" tabindex="0">Classifica</div>' +
                    '<div class="CollapsiblePanelContent">Classifica evento not yet implemented</div>' +
                    "</div>" +
                    '<script type="text/javascript">' +
                    'var CollapsiblePanel' + idr + ' = new Spry.Widget.CollapsiblePanel("CollapsiblePanel' + idr + '");' +
                    "</script>" +
                    '<div class="RSRHeader_1"></div>' +
                    "</div>");
                idr++;
                cr++;
            };
            $(".SE_MAIN").html(tt_ev);
            $(".SE_MAIN").append('<div class="LOG"></div>');
            /*$(".LOG").html('idr: '+idr+'</br>'+"n°.Evento : "+eventiRSR_PHP[idr][0]);*/
            statoPagRSR = 2;
            $('.btn_backRSR[data-mode="next"]').bind("click",nextRSR);
    
     }; // CHIUSURA FUNZIONE RIEMPIEVENTI

    idr è inizializzato a 0 fuori dalla funzione.
    il pulsante avanti viene "attivato" tramite il bind alla fine della funzione e richiama semplicemente la funzione
    codice:
    var nextRSR = function(){
        riempieventi();
    };
    Ultima modifica di SkyInside; 10-01-2014 a 16:41
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  5. #5
    Problema risolto, c'era il .bind al pulsante next che mandava in palla la funzione.
    Spostato nel load della pagina e ora funziona regolarmente.
    Ora devo creare la funzione che mi caricagli eventi precedenti.
    Per ora ho scritto questo:
    codice:
    var prevRSR = function(){
    	if ( idr >= 4 ){
    		idr = idr - 4;
    	} else {
    		idr = 0;
    	};
    	riempieventi();
    };
    Funziona ma l'unico difetto è che se gli eventi sono dispari mi carica gli eventi sbagliati.
    L'ordine di caricamento deve essere:
    Pag.1 - Ev.1 , Ev.2
    Pag.2 - Ev.3 , Ev.4
    Pag.3 - Ev.5 , Ev.6
    Pag.4 - Ev.7 , Ev.8
    Pag.5 - Ev.9 , Ev.10
    Pag.6 - Ev.11
    etc...
    se sono nella pagina 6 spingendo indietro dovrebbe caricarmi la pagina 5 (Ev.9,Ev.10) invece mi carica (Ev.8,Ev.9)
    potrei far fare un controllo se idr è pari o dispari, nel caso togliere 4 (se gli eventi sono pari) o 3 (se gli eventi sono dispari, sempre e comunque con l'indice >=4.
    Che ne dite?
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  6. #6
    Risolto anche il problema del pulsante indietro.
    alla fine della funzione ho inserito questo codice
    codice:
    $(".SE_MAIN").html(tt_ev);// Stampo gli eventi risultato del ciclo nel contenitore SE_MAIN sostituendo il contenuto
    statoPagRSR = 2;            // Stato della pagina
        if (idr % 2 == 0){        // Controllo se l'indice del ciclo è PARI o DISPARI
            ToF = 0;            // Se è pari metto a 0 la var ToF
        } else {
            ToF = 1;            // Se è dispati metto a 1 la var ToF
        };
    Poi ho modificato la funzione del mio pulsante
    codice:
    var prevRSR = function(){                    // BUTTON PREV
        if ( idr >= 4 && (ToF == 0)){
            idr -= 4;
        } else if (idr >= 4 && (ToF == 1)) {
            idr -= 3;
        }else {
            idr = 0;
        };
        riempieventi();
    };
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  7. #7
    Altro piccolo problemino al quale non ne sto venendo a capo.
    Dopo aver creato la mia lista di eventi vorrei che, cliccando sul div img_evento, mi aprisse la pagina relativa all'immagine che ho cliccato.
    Questo il mio HTML che ho dopo che carico gli eventi:
    codice:
    <div class="SE_MAIN">
     <div id="img_ev_container">
      <div class="img_evento" pos="Up" evrsr="0" style="background-image: url img da caricare);"></div>
     </div>
     <div id="img_ev_container">
      <div class="img_evento" pos="Down" evrsr="1" style="background-image: url img da caricare);"></div>
     </div>
    </div>
    Ad ogni evento che carica gli ho aggiunto alla classe img_evento i valori pos="Up" per il primo evento della pagina e pos="Down" per il secondo evento della pagina (ricordate che ho fatto visualizzare soltanto due eventi per pagina).
    Poi la voce evrsr="", qui ci carica il numero dell'indice dell'array contenente i dati di quell'evento.

    Ora come faccio a richiamare il valore di evrsr al click della classe img_evento?
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  8. #8
    Ho scoperto che con il comando .attr() riesco a leggere il valore quindi
    codice:
    var j = ('.img_evento').attr("evrsr");
    mi restituisce il valore ma solo del primo evento, quindi della pag 1 mi restituisce 0 sia con il primo che con il secondo evento, nella pag 2 mi restituisce 2 sia per il primo che il secondo evento.
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

  9. #9
    Risolto
    codice:
    function attiva_bind(){
        var j = 0;
        $(document).on("click",'.img_evento[pos="Up"]', function(event){
            $.playsound("select2");
            j = $('.img_evento[pos="Up"]').attr("evrsr");
            BTN_img_evento(j);
        })
        $(document).on("click",'.img_evento[pos="Down"]', function(event){
            $.playsound("select2");
            j = $('.img_evento[pos="Down"]').attr("evrsr");
            BTN_img_evento(j);
        })
    }
    Controllo se il click è sulla classe .img_evento pos"Up in j metto il valore evRSR corrispondente ad UP, altrimenti a DOWN. Poi j la passo alla funzione BTN_img_evento che mi stamperà quello che mi serve dell'array cliccato.

    Spero che tutto questo possa servire anche ad altri
    ***********************
    *** ~ SkyInside ~ ***
    ** www.star-game.it **
    ** luca@star-game.it **
    ***********************

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.