Visualizzazione dei risultati da 1 a 7 su 7

Discussione: JQuery css undefined

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    6

    JQuery css undefined

    Salve,
    ho bisogno di aiuto per un problema che mi sta dando parecchia noia, legato a JQuery.
    Premetto che di Javascript/Jquery non so quasi nulla, quindi nel codice potrebbero esserci errori macroscopici
    Vi posto il codice js:

    codice:
     $(document).ready(function() {
     
        $("p.box-title").click(function () {
    	
    		var a = $(this);
    
    		a.next(".container").toggle("blind", {}, 700);
    
                    a.delay(1000);
    		
    		alert(a.next(".container").css("display"));
        });
    });
    E quello xhtml:

    codice:
    <p class="box-title">Una perla a caso</p>
    <div id="l1" class="container">...</div>
    Cosa accade: Ad ogni click sul paragrafo con classe "box-title" il div successivo, che ha classe "container" si apre e chiude. Tutto perfettamente funzionante.

    Ora, però, a me serve sapere lo stato di tale container, dopo il click, per questioni di cookie, solo che il valore di "display" è "undefined".
    Ho provato a commentare la riga del "toggle" e così facendo lo stato mi viene ritornato correttamente.
    Ho pensato al fatto che l' effetto "toggle" abbia una durata di 700ms, quindi che quando viene controllato il valore di "display", l' animazione sia ancora in corso e lo stato sia indefinito. Perciò avevo aggiunto quel "delay" che però non ha prodotto effetti.

    C'è qualche errore? Manca qualcosa?

    Confido nell' aiuto di gente un po' più pratica di me

    Grazie anticipatamente

    Saluti

  2. #2
    Vedo due problemi:
    1- jQuery delay non fa quello che tu pensi, guarda la documentazione.
    2- secondo la documentazione toggle non è usato nel modo giusto
    version added: 1.4.3.
    toggle( [duration,] [easing,] [callback] )
    durationA string or number determining how long the animation will run. easingA string indicating which easing function to use for the transition. callbackA function to call once the animation is complete.
    Quindi fare così:
    codice:
    a.next('container').toggle(700, 'blind', function(){
      alert($(this).css('display'));
    });
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    6
    Scusa, mi sono dimenticato di precisare:

    As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.
    -> Visto che l' effetto con JQuery non era dei migliori, sono passato a jQuery UI:

    http://jqueryui.com/demos/toggle/

    Funzione con lo stesso nome, ma argomenti diversi( l' animazione in jQuery è solo "fast" o "slow", altri effetti sono applicabili solo usando la UI).

  4. #4
    Beh non cambia nulla comunque:

    codice:
    a.next('container').toggle('blind', {}, 700, function(){
      alert($(this).css('display'));
    });
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    6
    Originariamente inviato da mxa
    Beh non cambia nulla comunque:

    codice:
    a.next('container').toggle('blind', {}, 700, function(){
      alert($(this).css('display'));
    });
    Ok, ci siamo.
    Se ora, invece che lanciare l' alert, volessi salvare lo stato, come potrei fare?

    Una cosa così ha senso?

    codice:
    var c = null;
    
    a.next('container').toggle('blind', {}, 700, function(){
      c = $(this).css('display');
    });

  6. #6
    Non lo so se ha senso dipende cosa ci devi fare. Ma direi che nel 99% dei casi non ha senso salvare il valore della proprieta' CSS display.

    Ti interessa in altre parti del codice vedere se container e' visibile?
    Ti basterebbe anche fare cosi' ad esempio:

    codice:
    a.next('.container:visible').length > 0
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    6
    A me serve salvare il valore di "display", in una variabile, che verrà po inserita in un cookie, per memorizzare lo stato del blocco.

    Chiedevo se ha senso riferendomi alla sintassi usata, non ai motivi per cui mi serve.

    Mettere un assegnamento all' interno della funzione di callback, si può fare oppure no?
    Se si, come?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.