Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Script apre div nascosto ma non cambia l'immagine dei segni più e meno nell'indice

    Ciao a tutti, sono nuovo e non molto esperto di javascript.
    Prima di postare ho cercato, invano, di vedere se altri post mi aiutavano a risovere il problema (ma se, nella mia inesperienza, non posso escludere che ve ne siano).
    Ciò detto, espongo il mio problema:

    Premessa:

    La pagina che sto scrivendo (in php) è destinata a ospitare un indice analitico composto di voci (che, sempre visibili, sono precedute da una immagine che mostra il segno + ["plus1.png"]) e di sottovoci (che divengono visibili solo se viene selezionata la relativa voce; infatti a ogni voce corrispondono una o più sottovoci).
    Accanto ad ogni singola voce ho posto un anchor tag (apri/chiudi) cliccando sul quale: (a) si dovrebbe rendere visibile il DIV contenente le relative sottovoci; (b) l'immagine che precede la voce [plus1.png] dovrebbe cambiare in un segno meno [minus1.png].
    Naturalmente ricliccando sull'anchor tag (apri/chiudi) il DIV contenente le relative sottovoci dovrebbe tornare invisibile e l'immagine dovrebbe tornare ad essere il segno più [plus.png].

    Problema:

    Lo script funziona bene per quanto riguarda l'apertura e chiusura del DIV contenente le sottovoci dell'indice, ma non funziona per quanto riguarda le immagini, nel senso che l'immagine rimane sempre quella del segno più.

    Il codice:

    Trattandosi di un codice che viene scritto in php con un ciclo while, mi limito a scrivere, semplificandolo al massimo, solo il codice html che interessa.

    FILE "PROVA.HTML"

    <head>
    <script language="javascript">
    function togglebis(what){
    if (document.getElementById(what).style.display == "none") {
    document.getElementById(what).style.display = "block";
    } else {
    document.getElementById(what).style.display = "none";
    }
    }

    function showhide(imid) {
    if (document.getElementById(imid).src == "plus1.png") {
    document.getElementById(imid).src = "minus1.png";
    } else {
    document.getElementById(imid).src = "plus1.png";
    }
    }

    </script>
    </head>
    <body>

    <div style="border: 1px solid black;">
    <table>
    <tr>
    <td width="85%">[img]plus1.png[/img] Voce 1</td>
    <td width="15%">apri/chiudi</td>
    </tr>
    </table>
    </div>
    <div style="display:none;" id="sub1">
    - Sottovoce uno

    - Sottovoce due

    - Sottovoce tre

    </div>
    <div style="border: 1px solid black;">
    <table>
    <tr>
    <td width="85%">[img]plus1.png[/img] Voce 2</td>
    <td width="15%">apri/chiudi</td>
    </tr>
    </table>
    </div>
    <div style="display:none;" id="sub2">
    - Sottovoce uno

    - Sottovoce due

    </div>

    </body>
    </html>


    POSSIBILE SOLUZIONE:
    In seguito ad alcune prove che ho fatto (invertendo l'ordine dei files minus1.png e plus1.png) credo che il problema risieda nella funzione JS showhide(imid), ed in particolare nella sua condizione IF, che viene sempre riconosciuta come FALSA (anche quando dovrebbe essere VERA).
    Naturalmente, nell'esempio fatto, i due files "minus1.png" e "plus1.png" si trovano nella medesima directory del file "prova.html".

    Un grandissimo grazie in anticipo ad ognuno che vorrà provare ad aiutarmi.
    Saluti

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649

    Re: Script apre div nascosto ma non cambia l'immagine dei segni più e meno nell'indice

    Originariamente inviato da robby2000
    credo che il problema risieda nella funzione JS showhide(imid), ed in particolare nella sua condizione IF, che viene sempre riconosciuta come FALSA (anche quando dovrebbe essere VERA).
    quasi sicumente e' cosi':
    quando via javascript valuti un percorso non e' detto che venga considerato esattamente quanto presente nel markup, la maggioranza dei browser considerano il percorso assoluto
    ecco che la tua condizione non si verifica mai

    piuttosto che valutare questa possibilita', dal momento che lo swap e' comunque indissolubilmente legato al mostra/nascondi del livello, opera di conseguenza in un' unica funzione
    codice:
    function togglebis(num){
    if (document.getElementById('sub'+num).style.display == "none") {
    document.getElementById('sub'+num).style.display = "block";
    document.getElementById('led'+num).src = "minus1.png";
    } else {
    document.getElementById('sub'+num).style.display = "none";
    document.getElementById('led'+num).src = "plus1.png";
    }
    }
    apri/chiudi

    ciao

  3. #3
    Grazie mille per l'aiuto, reimpostato in questo modo lo script funziona benissimo.
    Ciao

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.