Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Astrarre una funzione

  1. #1

    Astrarre una funzione

    Salve,
    Sono ad un passo dalla soluzione, ma le mie ridicole competenze in JavaScript non mi consentono di finire l'opera...

    Uso spesso uno script in cui, se viene spuntato un checkbox, vengono visualizzate delle righe di una tabella, ciascuna con il proprio id; lo script è questo:
    codice:
    <script language="javascript" type="text/javascript">
    <!--
    function MostraRighe() {
    if (document.form1.NomeDelCheckbox.checked) {
        document.getElementById('rigaUno').style.display = "";
        document.getElementById('rigaDue').style.display = "";
    	document.getElementById('rigaTre').style.display = "";
    }
    else {
    	document.getElementById('rigaUno').style.display = "none";
    	document.getElementById('rigaDue').style.display = "none";
    	document.getElementById('rigaTre').style.display = "none";
    }
    }
    //-->
    </script>
    Mentre sul checkbox metto questo:
    codice:
    onClick="MostraRighe();"
    Ora, siccome sono incontentabile, mi piacerebbe "astrarre" il tutto e fare una funzione con passaggio di argomenti, in maniera da non toccare più la funzione ed modificare di volta in volta solo l'event handler...
    Nella mia mente, l'onClick dovrebbe presentarsi più o meno così:
    codice:
    onClick="MostraRighe('NomeDelCheckbox','rigaUno,rigaDue,rigaTre,rigaN');"
    Dato che le righe da mostrare/nascondere possono essere appunto N, il secondo argomento dovrebbe essere una stringa in cui i vari valori sono separati da virgole (o da altro); poi, nella funzione, la stringa:
    1. verrebbe separata in base alle virgole
    2. verrebbe creato un array e
    3. dulcis in fundo, per ogni elemento dell'array (con un ciclo, quindi) verrebbero "attivate" le parti:
    codice:
    document.getElementById(ElementoDellArray).style.display = "";
    e
    codice:
    document.getElementById(ElementoDellArray).style.display = "none";
    Ma come si fa???
    C'è qualcuno disposto ad aiutarmi?
    Vi ringrazio sin d'ora...

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Perche` passi il nome e non l'oggetto del checkbox?

    onClick="MostraRighe(this,'rigaUno|rigaDue|rigaTre |rigaN');"

    la funzione:
    codice:
    function MostraRighe(cc,rr) {
      var rig = rr.split("|");
      if (cc.checked) {
        for(var i=0; i<rig.length; i++) {
          document.getElementById(rig[i]).style.display = "block";
        }
      } else {
        for(var i=0; i<rig.length; i++) {
          document.getElementById(rig[i]).style.display = "none";
        }
      }
    }
    nota il carattere di separazione: non e` virgola, ne` puntoevirgola (hanno siginificati negli script e non mi piace utilizzarli per separare pezzi di stringa, anche se non e` vietato).

    Il display puo` essere:
    block (ogni blocco inizia a capo riga)
    inline (n pezzo di riga)
    none (non visualizzato)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Grazie, Mich_!
    Lo script funziona a meraviglia, tuttavia mi sono spiegato perchè, sull'onClick, preferisco usare il nome del checkbox anziche il "this": in un'altra pagina, lo script è attivato ANCHE tramite l'onLoad messo nel body, ed in questo caso il "this" chiaramente non ha senso...

    Come dicevo nel mio primo post, le mie conoscenze di JavaScript sono praticamente nulle, e non so come adattare quello che mi hai postato alla nuova situazione dell'onLoad... ho provato a mettere
    codice:
    if (document.form1.cc.checked)
    anzichè
    codice:
    if (cc.checked)
    ma, neanche a dirlo, non funziona più...

    Che modifiche devo apportare?
    Grazie per la pazienza...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    O passi il nome (stringa), oppure l'oggetto.

    Se passi il nome devi poi usare all'interno getElementById()
    Se passi l'oggetto il codice va lasicato cosi` come lo ho fatto io.

    Per passare l'oggetto (fuori dal form) puoi usare:

    cliccca
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    si, con il getElementById() funziona benissimo (devo solo ricordarmi di specificare l'id del checkbox...)!
    ancora grazie!

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.