jQuery Italia - Forum » Supporto ed Aiuto » Problemi con jQuery

Dopo le presentazioni, il primo problemino con funzione.load()

(7 articoli)
  1. biglorenz
    Membro

    Ciao a tutti.. :-)Come da titolo del topic, scrivo in quanto ho un "problemone" con la funzione .load()Probabilmente è già stato trattato in mille salse tale argomento,in generale sul web, e anche qui(ho trovato solo un topic) ma onestamente,non ho capito se esiste una soluzione o meglio dove sbaglio! :D

    Allora sto lavorando al progetto di un sitarello web in php.Le pagine hanno una struttura fissa(header con logo, data e menu) , il footer con l'intestazione e un div contenuto.Tramite un semplice switch case in php nella index, controllo quale azione del menù e stata richiesta e in base ad essa carico la pagina che mi interessa.E fino a qui tutto bene.. :DPer migliorare il progetto visto che si parla di inserire un suono tramite un palyer in flash ed evitare quindi che al cambio di ogni pagina il suono riparta eper approfondire  le mie conoscenze da un mesetto mi sono messo a studiare jquery,un po di concetti base li ho appresi sul web, un po qui da voi e fino ad acquistare un manuale! :D Seguendo le varie parti e suggerimenti,con poche  righe di codice, devo dire che si possono davvero fare delle cose spettacolari con questo FrameWork!  ;) quindi era mio interesse continuare a studiarlo.. :-)

    Arrivo al dunque :-) :In pratica ad un certo punto dell'implementazione, per mantenere fissa la struttura della pagina e cambiare solo il div del contenuto, mi sono affidato(come suggerito pressochè da tutti e tutto) alla funzione .load() caricando all'interno del div "contenuto" la pagina relativa alla voce del menù cliccata.E fin qui tutto bene.Ora però iniziano i problemi, ovvero dal momento in cui uso tale funzione, tutti gli altri evenutali script non vengono più assolutamente eseguiti: Nessuno script viene eseguito dopo che è si è cliccato sulla voce del menu e quindi aver "attivato" lo script main che contiene il metodo .load().. ;(E' come se lo script che contiene la .laod() tenesse "occupato" il gestore degli eventi, ignorando tutti gli altri!Ecco la funzione main con la load:

    $(document).ready(function(){        $('#menu a').click(function(){
     var page = $(this).attr('href');         
     $('#switched').load(page+' #content');                
    return false;    });

    });

    E se in una pagina che viene caricata inserisco anche solo un comando semplice come:

    $(document).ready(function(){

    $('#slide-div').click(function(){    alert('HAI CLICCATO SUl div slide-div'); });});

    l'alert non viene visualizzato.tramite firebug ho notato che accanto alle voci del menu appare questo:events=Object { click={...}}handle=function()
    mentre sul div al quale ho associato l'evento click(in questo caso div_test)
     appare la scritta fxqueue[ ]

    Premetto che il codice se eseguito in modo separato funziona senza problemi!!! :DOra so che forse ho scritto molto e che forse la risposta è un qualcosa che sta alle basi di Jquery, ma il mio intento è quello di capire il perchè di questo strano comportamento!Suggerimenti,critiche e osservazioni sono bene accette!!!!Grazie in anticipo,spero di non essere caduto nel banale ;)SalutiLorenzo 

    Pubblicato 7 months fa #
  2. jqueryitalia
    Amministratore

    Benvenuto Lorenzo!

    Prova a sostituire nella pagina caricata la funzione:
    $('#slide-div').click(function()
    {
        alert('Hai cliccato sul div
    slide-div');
    });

    con:
    $('#slide-div').live('click', function() {
        alert('Hai cliccato sul div slide-div');
    });
    `

    Pubblicato 6 months fa #
  3. biglorenz
    Membro

    :-)Eccoci qua, allora prova effettuata e per magia... :-)
    Ora gli script delle altre pagine legati ad dei click o mouse over possono  funzionare!!!Grazie Admin.. ;)
     ..Sicuramente ora dovrei riuscire ad andare avanti con l'implementazione del mio progettino.. :DTra domani e lunedi mi rimetto al lavoro per cercare di capire meglio il suggerimento datomi.... :D
    A questo punto però mi sorge una domanda spontanea,sulla quale stavo meditando,legata sempre ad un problema riscontrato nel mio "progetto"... e se volessi avere il caricamento di alcuni elementi nella pagina come ad esempio la mappa di un certo  luogo tramite le api di google v3,oppure dopo aver caricato un'immagine far apparire a dissolvenza un blocco contenente testo o immagini, devo sempre utilizzare il metodo .live() per catturare un'evento di tipo "XX" e poi far apparire la mappa ? :-)
    Farò cmq delle prove e vi farò sapere.. ;)
    Per ora posso solo dire/dirvi grazie per l'attenzione ed i suggerimenti! ;)Buon pomeriggioLorenzo
    P.s. avrei già voglia di mettermi sotto a fare delle prove,ma purtroppo sono appena rientrato a casa e tra poco devo uscire di nuovo.. :-( Uffi!! :D

    Pubblicato 6 months fa #
  4. jqueryitalia
    Amministratore

    Ciao Lorenzo.

    Il metodo .live() è una variante del metodo base .bind() usato per collegare i gestori di eventi agli elementi. Quando un elemento è caricato successivamente deve essere collegato con il metodo .live(), in modo che il gestore possa essere richiamato anche in seguito.

    Per alcuni esempi ti rimando alla documentazione ufficiale che trovi qui http://api.jquery.com/live/

    Buoina serata.

    Pubblicato 6 months fa #
  5. biglorenz
    Membro

    ..Volevo solo comunicare che mi sto perdendo nel mondo immenso di questa splendida libreria... e non sono scappato.. :D
    Non c'è n'è c'è da studiare e quanto.. :D
    Nei prossimi giorni conto di approfondire il discorso del gestore degli eventi.. al 90% arriveranno nuove domande.. :D
     Per ora grazie di tutto  l'aiuto! un passetto per volta il progettino prende forma.. :-)Ora sto litigando con gli iframe di google, o meglio con internet exploer.. :-) se riesco a rimpiazzarlo con le googlemaps API V3 dovrei essere a posto..
     Un salutoneLorenzo

    Pubblicato 6 months fa #
    Register
  6. jqueryitalia
    Amministratore

    Strano: problemi con IE...
    Non succede mai!!! :-D :-D :-D

    Pubblicato 6 months fa #
  7. biglorenz
    Membro

    Rieccomi qua! :D
    Allora in questa settimana causa "casini" su piu fronti, sono riuscito solo a leggere i vari messaggi sul forum ma non a rispondere.. :-)

    Cmq giusto per portare avanti questa discussione, la combinazione tra load() e Live funziona perfettamente!
    Sarebbe curioso sapere come si comportano entrambe a livello  di DOM, e gestore degli eventi.. ma tempo permettendo vorrei approfondire! :D Per ora mi devo "solo" accontentare del fatto che il codice scritto funzioni.. :D

    Naturalmente si notano delle imperfezioni con IE(strano vero?) ,ma per questo aprirò un nuovo topic, per evitare che questo vada OT.

    Un ringraziamento per il supporto datomi
    saluti
    Lorenzo

    Pubblicato 6 months fa #

RSS feed for this topic

Replica

Devi aver fatto il login per poter pubblicare articoli.