• User Attivo

    Quante ne vuoi!!!! 😄

    Allora... dai un id all'ancora tipo <a id="ciccio" ... ... ...

    Dopodiché aggiungi alla funzioni mostra e nascondi un istruzione per modificare il testo interno dell'ancora. Se vuoi che passi da mostra a nascondi devi usare una stessa funzione che controlla se il testo è già scomparso o no e agisce di conseguenza... per parametrizzare il tutto devi passare alla funzione un parametro che identifica l'elemento che stai elaborando.

    Ecco un esempio completo e funzionante (già testato) del tutto (anche su firefox, senza problemi... se qualcosa non ti è chiaro chiedi pure... se vuoi di + devi cominciare a "pagare" 😛

    
    <html>
    <script language="JavaScript">
    <!--
    function mostraNascondi(idTesto) {
     
    if(document.getElementById('testo' + idTesto).style.display == 'none')
    {
     document.getElementById('testo' + idTesto).style.display='';
     document.getElementById('ciccio' + idTesto).innerHTML = "- Nascondi";
    }
    else
    {
     document.getElementById('testo' + idTesto).style.display='none';
     document.getElementById('ciccio' + idTesto).innerHTML = "+ Mostra";
    }
    }
     
    //-->
    </script>
    <body>
    Prima parte: <a id="ciccio1" href="javascript:mostraNascondi('1');">+ Mostra</a><br>
    <br /><div id="testo1" style="display: none; border: 1px solid;">Questo è il testo del primo Div
    </div> 
    Seconda Parte: <a id="ciccio2" href="javascript:mostraNascondi('2');">+ Mostra</a><br>
    <br /><div id="testo2" style="display: none; border: 1px solid;">Questo è il testo del secondo Div
    </div> 
    </body>
    </html>
    
    

  • User

    così funziona, adesso volendolo implementare all'interno di una struttura con i frame: link su frame1 e div su frame 2 con la possibilità che quando clicchi su un link nasconte automaticamente il div visualizzato sostituendolo con il nuovo


  • User Attivo

    se usi i frame, e quello a sinistra è un menù, nei link del menù basta che tu metta <a href="pagina.html" target="nomedelframe2"> e lui ti carica la pagina.html direttamente nel tuo frame2.

    Se la tua pagina è dinamica in qualche maniera puoi passargli i parametri tramite query string:

    <a href="paginadinamica.xxx?ID=idqualunque" target="nomedelframe">

    era questa la tua idea? Se invece vuoi che tutti i div siano contenuti nel secondo frame, e vuoi solo farli apparire e scomparire allora ti sconsiglio la struttura a frame (la sconsiglio in genere a parte rarissime e strane specifiche), a quel punto è uguale farlo con una singola pagina.


  • User

    comunque resta il problema di automatizzare il fatto che quando clicchi scopare il div visualizzato e appare quello nuovo


  • User Attivo

    Se parlavi del menù è piuttosto facile, basta che ti salvi in una variabile il div che hai allargato (vecchioDiv) e la relativa voce del menu (vecchioMenu), e quando ne allarghi un altro lo fai scomparire

    ti posto il codice

    
    <html>
    <script language="JavaScript">
    <!--
    var vecchioMenu;
    var vecchioDiv;
    vecchioMenu = '';
    vecchioDiv = '';
    
    function mostraNascondi(idTesto) {
     
    if(document.getElementById('testo' + idTesto).style.display == 'none')
    {
    if(vecchioMenu != '') vecchioMenu.innerHTML = '+ Mostra';
    if(vecchioDiv != '') vecchioDiv.style.display='none';
    
    document.getElementById('testo' + idTesto).style.display='';
     document.getElementById('ciccio' + idTesto).innerHTML = "- Nascondi";
    
     
    vecchioMenu = document.getElementById('ciccio' + idTesto);
    vecchioDiv = document.getElementById('testo' + idTesto);
     
    }
    else
    {
    
    document.getElementById('testo' + idTesto).style.display='none';
     document.getElementById('ciccio' + idTesto).innerHTML = "+ Mostra";
     
    vecchioMenu = '';
    vecchioDiv = '';
    
    }
    }
     
    //-->
    </script>
    <body>
    Prima parte: <a id="ciccio1" href="javascript:mostraNascondi('1');">+ Mostra</a><br>
    <br /><div id="testo1" style="display: none; border: 1px solid;">Questo è il testo del primo Div
    </div> 
    Seconda Parte: <a id="ciccio2" href="javascript:mostraNascondi('2');">+ Mostra</a><br>
    <br /><div id="testo2" style="display: none; border: 1px solid;">Questo è il testo del secondo Div
    </div> 
    </body>
    </html>
     
    
    

  • User

    ok, per far in modo che di defaulti mi mostra il primo id?


  • User

    ho visto che utilizzando i frame funziona lo stesso impostando il target al link, nonostante gli stessi link sono presenti su tutte e due i frame non si impalla.

    C'è un problema però cliccando due volte sullo stesso link appare/scompare


  • User Attivo

    Se non vuoi che scompaia al secondo click devi levare la parte di javascript che stà nell "else"

    Se vuoi che il primo div compaia basta che invece di dargli display:none gli dai display:block e il resto funziona uguale.

    ah... dimenticavo, se vuoi che il primo div sia visibile devi anche sostituire all'inizio del codice javascript questo:

    
    vecchioDiv = '';
    
    

    con questo: (al posto di 'idDelPrimoDiv' ci và l'id del primo div

    
    vecchioDiv = document.getElementById('idDelPrimoDiv');
    
    

  • User

    il problema è che i div vengono generati da un ciclo


  • User Attivo

    Se il ciclo è di tipo For allora basta che metti un istruzione condizionale

    if (indiceDelCiclo = 1) -> display:block;

    altrimenti ti crei una variabile boleana prima di iniziare il ciclo

    blPrimo = true

    e dentro il ciclo fai il controllo:

    if blPrimo -> diplay:block + blPrimo = false

    in modo che scatta solo la prima volta.

    Se all'inizio della pagina non sai il nome del primo div allora dentro quell'istruzione condizionale salvati su una stringa il nome del primo div, tipo "sPrimoDiv"

    e alla fine della pagina html (ma prima del tag di chiusura) metti

    <script type="text/javascript">
    vecchioDiv = document.getElementById('<%=sPrimoDiv%>');
    </script>

    ovviamente riadattando la sintassi alla tecnologia ed al linguaggio che stai utilizzando.


  • User

    fare invece una funzione js che richiamo sul body con onload che mi richiama la funzione per mostrare il div

    anche perchè credo che poi non si setti la variabile che ti permette di nascondere il div mostrato nei link successivi


  • User Attivo

    Non ti ho suggerito quello perché quando costruisci il <body> della pagina ancora non conosci il nome del div (ma lo conosci solo dopo che cicli sugli elementi)

    Il codice che ti ho postato (quello da mettere a fine pagina) serve a posta per inizializzare la variabile e mantenera il funzionamento del codice.

    Se percaso già all'altezza del tag <body> conosci il nome del div ti basta mettere nell'onload "mostraNascondi('nomeDelDiv');"

    ma io spesso ho avuto problemi con l'evento onload (a volte mi scatta prima che la pagina sia stata costruita interamente e quindi javascript non và).

    Semmai fai un tentativo.


  • User

    come pensavo con l'IF nel ciclo non setta la variabile vecchio div e di conseguenza gli altri div si sovrappongo, il primo div nonn scompare mai


  • User Attivo

    @SeraphimFoA said:

    e alla fine della pagina html (ma prima del tag di chiusura) metti

    <script type="text/javascript">
    vecchioDiv = document.getElementById('<%=sPrimoDiv%>');
    </script>

    ovviamente riadattando la sintassi alla tecnologia ed al linguaggio che stai utilizzando.

    Questa riga di codice serve proprio a settare vecchioDiv... se l'hai già messa controlla che abbia valorizzato bene la stringa sPrimoDiv
    ( metti un paio di alert nelle righe successive a quella:

    
    <script type="text/javascript">
    vecchioDiv = document.getElementById('<%=sPrimoDiv%>');
    alert(vecchioDiv);
    alert('<%=sPrimoDiv%>);
    </script>
    
    

    e controlla che il primo alert ti dica [object] ed il secondo ti dia il nome del primo div


  • User

    si ma se il ciclo si trova all'interno di una pagina lo script alla fine si setterà con l'ultimo div


  • User Attivo

    Non se la variabile sPrimoDiv la valorizzi all'interno dell If che usi per far comparire solo il primo

    if (indiceDelCiclo = 1)

    sPrimoDiv = "nomeDelDiv"
    div display:block

    end if


  • User

    Ok così funziona, volendo utilizzare la stessa funzione per far apparire un div con posizionamento assoluto:

    .popup {
    position: absolute;
    display: none;
    width: 400px;
    height: 300px;
    top:300px;
    left:50px;
    background-color: #FFFFFF;
    border: 1px solid #C10818;
    padding: 10px;
    z-index:3;
    }


  • User

    devo dire che questo menù funziona veramente bene però mi sono imbattuto in un problema non da poco ovvero come posso impostare una variabile che mi riporta il menù con il div visualizzato della pagina precedente quando apro una nuova pagina???❌x❌x❌x


  • User Attivo

    @makeart said:

    devo dire che questo menù funziona veramente bene però mi sono imbattuto in un problema non da poco ovvero come posso impostare una variabile che mi riporta il menù con il div visualizzato della pagina precedente quando apro una nuova pagina???❌x❌x❌x
    Via js questo è impossibile. Puoi farlo solo lato server (almeno se vuoi farlo in modo decente).
    Per un motivo molto semplice. Il javascript, essendo lato client, si resetta nel caso in cui ricarichi o cambi pagina. Tutte le variabili settate in precedenza scompaiono e ritorna tutto nello stato originario.
    Ciao


  • User

    ok, ho inserito nel tag body onload="javascript:mostraNascondi($div)"
    e valorizzando questa variabile mi reimposta il div giusto adesso però come faccio a valorizzarla attraverso la funzione stessa che mi visualizza il div