Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,786

    JQuery : Show/Hide slideToggle

    Ciao,

    ho una pagina così strutturata:

    Codice PHP:
    <dl>
        <
    dt>[url="#"]Test 1[/url]</dt>
        <
    dd>Prova 1</dd>
        <
    dt>[url="#"]Test 2[/url]</dt>
        <
    dd>Prova 2</dd>
        <
    dt>[url="#"]Test 3[/url]</dt>
        <
    dd>Prova 1</dd>
    </
    dl

    vorrei che al carricamento della pagina tutti gli elementi dd siano nascosti (display:none)

    e al click del link si apre solo il relativo elemento dd magari con effetto slideToggle usando JQuery.

    come posso fare ?

    grazie !
    [Scambio Links a Tema] Contattatemi in Privato x + Info.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Tu fin dove sei arrivato?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Ciao, questa è la versione più semplice dello script che ti serve:

    codice:
    $(document).ready(function () {
    
        $('dd').hide();
        $('dt a').click(function () {
              $(this).parent().next().slideToggle();
        })
    
    });
    Tieni conto di due questioni:

    1) poichè nascondi i dd al DOMready, potresti imbatterti in un "effetto flash" in cui vedresti inizialmente i dd aperti (finché il documento si carica) e solo successivamente li vedresti scomparire. In tal caso ti conviene nascondere gli elementi via CSS

    2) con questo script le coppie dt/dd sono indipendenti, se volessi realizzare un effetto accordion (solo un elemento aperto alla volta) devi modificare lo script in questo modo:

    codice:
    $(document).ready(function () {
        var $dds = $('dd');
        
        $dds.hide();
        
        $('dt a').click(function () {
              var $dd = $(this).parent().next();
            
            $dds.not($dd).slideUp();
            $dd.slideToggle();
        });
    });
    Ho creato un esempio dinamico su jsfiddle.net

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,786
    Originariamente inviato da dwj
    Ciao, questa è la versione più semplice dello script che ti serve:

    codice:
    $(document).ready(function () {
    
        $('dd').hide();
        $('dt a').click(function () {
              $(this).parent().next().slideToggle();
        })
    
    });
    Tieni conto di due questioni:

    1) poichè nascondi i dd al DOMready, potresti imbatterti in un "effetto flash" in cui vedresti inizialmente i dd aperti (finché il documento si carica) e solo successivamente li vedresti scomparire. In tal caso ti conviene nascondere gli elementi via CSS

    2) con questo script le coppie dt/dd sono indipendenti, se volessi realizzare un effetto accordion (solo un elemento aperto alla volta) devi modificare lo script in questo modo:

    codice:
    $(document).ready(function () {
        var $dds = $('dd');
        
        $dds.hide();
        
        $('dt a').click(function () {
              var $dd = $(this).parent().next();
            
            $dds.not($dd).slideUp();
            $dd.slideToggle();
        });
    });
    Ho creato un esempio dinamico su jsfiddle.net
    Grazie 1000000

    un'ultima cosa per favore,

    è possibile applicare una classe al dt cliccato ?

    inoltre c'è un modo per non far salire a inizio pagina dopo il click ?

    grazie !

    p.s. con firefox non va
    [Scambio Links a Tema] Contattatemi in Privato x + Info.

  5. #5
    Ops scusa x la dimenticanza.

    La pagina va all'inizio perché quando clicchi sul link vengono prima eseguiti gli eventi JavaScript e poi quello di default dell'elemento (in questo caso vieni rimandato a "#" --> inizio pagina)

    Per ovviare al problema la soluzione puù rapida è aggiungere, alla fine della funzione un return false;

    codice:
    $(document).ready(function () {
        var $dds = $('dd');
        
        $dds.hide();
        
        $('dt a').click(function () {
              var $dd = $(this).parent().next();
            
            $dds.not($dd).slideUp();
            $dd.slideToggle();
    
            return false;
        });
    });
    Ho aggiornato l'esempio su jsfiddle: http://jsfiddle.net/dwightjack/ujz7m/1/

    Aprendolo con FF9 nn ho problemi. Se hai installato Firebug, prova ad aprire la console ed a verificare l'errore che viene restituito.

    ciao!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,786
    Firefox OK, avevo il javascritp disabilitato

    Ho aggiornato lo scritp alle mie esigenze:

    http://jsfiddle.net/ujz7m/5/

    Solo che alla chiusura su ie non rispetta la regola css margin: 2em 0;

    mentre su FF tutto OK.

    Inoltre vorrei applicare la classe .attivo al dt cliccato, ma come ?

    grazie di cuore



    Originariamente inviato da dwj
    Ops scusa x la dimenticanza.

    La pagina va all'inizio perché quando clicchi sul link vengono prima eseguiti gli eventi JavaScript e poi quello di default dell'elemento (in questo caso vieni rimandato a "#" --> inizio pagina)

    Per ovviare al problema la soluzione puù rapida è aggiungere, alla fine della funzione un return false;

    codice:
    $(document).ready(function () {
        var $dds = $('dd');
        
        $dds.hide();
        
        $('dt a').click(function () {
              var $dd = $(this).parent().next();
            
            $dds.not($dd).slideUp();
            $dd.slideToggle();
    
            return false;
        });
    });
    Ho aggiornato l'esempio su jsfiddle: http://jsfiddle.net/dwightjack/ujz7m/1/

    Aprendolo con FF9 nn ho problemi. Se hai installato Firebug, prova ad aprire la console ed a verificare l'errore che viene restituito.

    ciao!
    [Scambio Links a Tema] Contattatemi in Privato x + Info.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,786
    non riesco ad applicare

    Codice PHP:
    .addClass("attivo"); 
    all'elemento dt cliccato
    [Scambio Links a Tema] Contattatemi in Privato x + Info.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,786
    Codice PHP:
    $(document).ready(function () {
        var 
    $dds = $('dd');
        
    $dds.hide();
        $(
    'dt a').click(function () {
            var 
    $dd = $(this).parent().next();
            
    $dds.not($dd).slideUp();
            
    $dd.slideToggle();
            $(
    this).parent('dt').addClass('attivo');
            return 
    false;
        });
    }); 
    sono riuscito ad applicare la classe

    $(this).parent('dt').addClass('attivo');

    ma non riesco a toglierla all'apertura di un'altro

    una cosa del genere

    $dds.not($dd).removeClass('attivo').slideUp();

    aiuto

    grazie !
    [Scambio Links a Tema] Contattatemi in Privato x + Info.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,786
    Codice PHP:
    $(document).ready(function () {
        var 
    $dds = $('dd');
        
    $dds.hide();
        $(
    'dt a').click(function () {
            var 
    $dd = $(this).parent().next();
            
    $dds.not($dd).slideUp();
            $(
    'dt').removeClass('attivo');
            
    $dd.slideToggle();
            $(
    this).parent('dt').addClass('attivo');
            return 
    false;
        });
    }); 
    Ci sono riuscito

    Grazie DWJ
    [Scambio Links a Tema] Contattatemi in Privato x + Info.

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.