Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317

    [jQuery/AJAX] Tooltip non modifica bene l'attributo title

    Ho questo tooltip e sono interessato a riempirlo quando un utente passa sopra al link di un topic per poter accedere ad un suo breve contenuto senza doverlo necessariamente aprire:

    codice:
    <span data-tooltip aria-haspopup="true" class="has-tip {forumID}" title=""><a href="{topicURL}">{lastPostTitle}</a></span>
    Lo lavoro con jQuery in questo modo:
    codice:
    <script>
    $('.has-tip').mouseover(function() {
        var topicID = $('.has-tip').attr("class").split(' ');
        $.ajax({
            url: '<?php echo $var['base_url'] ?>ajax/get-topic/' + topicID[1],
            type: 'GET',
            dataType: 'json',
            cache: 'true',
            success: function (ret) {
                $('.has-tip').attr("title", ret.message);
            },
        });
    });
    </script>
    Ma il risultato è questo:
    http://s29.postimg.org/6azfqpxs7/tooltip.jpg

    Oltretutto un problema aggiuntivo è che mi mostra il nuovo contenuto di title solo se "ripasso" una seconda volta sul link
    Ultima modifica di zacca94; 18-12-2014 a 20:32
    Logiqo.org gestionale per perizie infortunistiche.

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    La logica di funzionamento del tuo script è sbagliata.

    Devi considerare che AJAX, per sua natura, funziona in modo asincrono (se non diversamente specificato).

    La funzione indicata nel success viene eseguita solo a conclusione di tutto il processo di trasferimento dei dati tra server e client.
    Infatti, quando viene effettuata una chiamata AJAX viene inviata al server una richiesta alla pagina specificata, per cui viene eseguito lo script lato server (php o quello che è), e dal server viene restituita una risposta (sempre che non ci siano stati errori). Solo a quel punto viene chiamata la funzione specificata nel success.

    Tale funzione, quindi, non è (e non può essere) eseguita istantaneamente (cioè nel momento in cui effettui il mouseover) ma si deve attendere, inevitabilmente, la conclusione di tutto quel processo.

    Anche se il tempo di risposta può essere relativamente breve, è comunque influenzato da vari fattori che possono ritardarlo sensibilmente o addirittura potrebbe non esserci alcuna risposta, ad esempio nel caso in cui venga a mancare la connessione oppure se il server va giù o se lo script lato server, per un qualsiasi motivo, non restituisce alcun valore.

    Ora, impostando la proprietà async come false è possibile ottenere, per tale chiamata AJAX, un funzionamento sincrono.
    Il problema però resta sempre il tempo di attesa tra chiamata e risposta, nel quale, in questo caso, qualsiasi azione sul browser viene bloccata finché non avvenga una risposta da tale chiamata.

    Personalmente agirei in modo diverso, popolando ad esempio il title, o quello che è, da principio, quando la pagina stessa viene creata.
    Poi il tooltip te lo gestisci come vuoi in seguito, evitando in questo caso le chiamate ajax.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    La logica di funzionamento del tuo script è sbagliata.

    Devi considerare che AJAX, per sua natura, funziona in modo asincrono (se non diversamente specificato).

    La funzione indicata nel success viene eseguita solo a conclusione di tutto il processo di trasferimento dei dati tra server e client.
    Infatti, quando viene effettuata una chiamata AJAX viene inviata al server una richiesta alla pagina specificata, per cui viene eseguito lo script lato server (php o quello che è), e dal server viene restituita una risposta (sempre che non ci siano stati errori). Solo a quel punto viene chiamata la funzione specificata nel success.

    Tale funzione, quindi, non è (e non può essere) eseguita istantaneamente (cioè nel momento in cui effettui il mouseover) ma si deve attendere, inevitabilmente, la conclusione di tutto quel processo.

    Anche se il tempo di risposta può essere relativamente breve, è comunque influenzato da vari fattori che possono ritardarlo sensibilmente o addirittura potrebbe non esserci alcuna risposta, ad esempio nel caso in cui venga a mancare la connessione oppure se il server va giù o se lo script lato server, per un qualsiasi motivo, non restituisce alcun valore.

    Ora, impostando la proprietà async come false è possibile ottenere, per tale chiamata AJAX, un funzionamento sincrono.
    Il problema però resta sempre il tempo di attesa tra chiamata e risposta, nel quale, in questo caso, qualsiasi azione sul browser viene bloccata finché non avvenga una risposta da tale chiamata.

    Personalmente agirei in modo diverso, popolando ad esempio il title, o quello che è, da principio, quando la pagina stessa viene creata.
    Poi il tooltip te lo gestisci come vuoi in seguito, evitando in questo caso le chiamate ajax.
    ti ringrazio per aver speso del tempo per darmi una lezione.

    La tua soluzione la avevo considerata, ma con una logica di ottimizzazione è sicuramente più "pesante" una pagina in cui estraggo il first post content (quindi join su due tabelle), lo taglio e lo lavoro (se utente mi inserisce un bbcode o decido di non formattarlo, ma comunque lo devo eliminare o lo formatto direttamente) e lo inserisco nel tooltip invece che "richiamare" solo quelli richiesti.
    Logiqo.org gestionale per perizie infortunistiche.

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.