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

    Problema con function e con le classi

    Aiutino con Javascript
    Ciao a tutti ho un piccolo problema basandomi su uno spoiler di un forum ho realizzato questo piccolo script che permette alla seleziona dell' input radio "Si" (onclick) compaio la seconda domanda e alla scelta dell' radio "No" Scompaia..

    Codice:

    <div class="quotetitle">
    <input type="radio" onclick="if (this.parentNode.parentNode.getElementsByTagName(' div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('d iv')[1].getElementsByTagName('div')[0].style.display = '';}" id="option" name="option">Si
    <input type="radio" onclick="if (this.parentNode.parentNode.getElementsByTagName(' div')[1].getElementsByTagName('div')[0].style.display != 'none') { this.parentNode.parentNode.getElementsByTagName('d iv')[1].getElementsByTagName('div')[0].style.display = 'none';}" id="option" name="option">No</div>


    <div class="quotecontent">
    <div style="display: none;">
    Testo che appare alla scelta di si
    </div></div>

    Ora ho un piccolo problema sono un po' molto nabbo con il Javascript quindi chiedevo a voi se mi potevate realizzare qualcosa di più semplice.. Innanzitutto lo script funziona con il TagName (div). Io desideravo che funzionassi con le classi o con gli ID se non mi complico la vita e non ci capisco più niente...
    Poi l' input inizia a diventare lunghissimo avevo in mente di farlo con le funziona ma non funge qualcuno mi sa aiutare?? Grazie di tutto l' aiuto in anticipo!!
    xD97Macio97xD
    oO
    0

  2. #2
    Ciao
    questo codice dovrebbe ottenere lo stesso risultato del tuo ma in modo un po' più semplice:

    codice:
    <html>
    <head>
    
       <style>
          .quotecontent {
             display: none;
          }
       </style>
    
       <script type="text/javascript">
          function mostra_nascondi(valore) {
    
             if (valore == 'si') {
                document.getElementById('quotecontent').style.display = "block"
             } else {
                document.getElementById('quotecontent').style.display = "none"
             }
    
          }
       </script>
    
    </head>
    <body>
    
       <div class="quotetitle">
          <input type="radio" id="option_si" name="option" value="si" onclick="mostra_nascondi(this.value)"><label for="option_si">Sì</label>
          <input type="radio" id="option_no" name="option" value="no" onclick="mostra_nascondi(this.value)"><label for="option_no">No</label>
       </div>
    
       <div class="quotecontent" id="quotecontent">
          Testo che appare alla scelta di si
       </div>
    
    </body>
    </html>
    Come vedi invece di inserire tutti i comandi js nei tag ho preferito inserire solo la chiamata ad una funzione e poi sviluppare tutto il codice nella funzione. In questo modo si alleggeriscono i tag rendendo il tutto più leggibile e inoltre nella function è facile indentare il codice migliorando ancor più la leggibilità.

    Ho poi cambiato il modo di individuare quale radio è cliccato assegnando ad ogni scelta un value che viene passato alla funzione con this.value. In questo modo la funzione può fare il test direttamente sui valori "si" e "no".

    Per individuare un singolo elemento il modo migliore è di dargli un id (occhio che l'id DEVE essere univoco, nel tuo codice invece ce n'erano due uguali) e poi usare la document.getElementById.

    Sempre per una questione di ordine ho tolto le due div nidificate che, per questa specifica esigenza, non servivano, e ho spostato lo style in head.

    E infine ho assegnato delle <label> ai pulsanti perché così si migliora l'usabilità, infatti il radio viene selezionato non solo se si clicca sul pallino ma anche se si clicca sulla parola "Sì" o "No".

    Se hai altre domande chiedi pure.
    Buon anno.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Wow!! *-* Sei fantastico grazie mille hai risolto un sacco dei miei problemi ho però come al solito un po di domande se volessi che selezionando no, oltre che nascondere il testo dopo aver premuto no, compaia un' altra domanda.. (e viceversa)
    Tipo
    Sei maschio? Si -- No
    Se hai premuto Si visualizzi questo testo, se premi no scompare e compare questo sotto
    se hai premuto No visualizzi questo testo, se premi Si scompare e compare quello sopra

    Come dovrebbe essere l' evento on click?

    In più se voglio applicare tanti di questi script dovrei creare ogni volta una nuova funzione e un nuovo div(+ il CSS display:none) o c'è un modo più veloce ?
    Grazie mille per l' aiuto




    P.S. hai skype?
    xD97Macio97xD
    oO
    0

  4. #4
    Ciao,
    per fare quello che hai chiesto basta aggiungere un'altra div col nuovo testo, darle un id diverso da quelli già presenti (ammettiamo che sia quotecontent2) e poi aggiungere il settaggio della sua proprietà display nei due rami dell'if in modo opposto a quotecontent così che quando una appare l'altra scompare e viceversa, così:

    codice:
             if (valore == 'si') {
                document.getElementById('quotecontent').style.display = "block";
                document.getElementById('quotecontent2').style.display = "none";
             } else {
                document.getElementById('quotecontent').style.display = "none";
                document.getElementById('quotecontent2').style.display = "block";
             }
    nell'evento onclick invece non cambia niente, continuerà a chiamare la function come ora.

    L'altra domanda invece è un po' troppo generica perché ti possa rispondere, dipende da quello che vuoi fare. Devi tener separati concettualmente gli eventi dalle azioni collegate agli eventi, anche per questo ti ho suggerto di togliere le istruzioni js dai tag e inserirle in una function, perché così è più chiaro che l'handler "onclick" non esegue nessuna istruzione operativa ma si limita a passare il controllo alla function che è quella che fa il lavoro vero e proprio (in questo caso visualizzare e nascondere).

    Se hai altri eventi su altri tag che però devono fare sempre lo stesso lavoro ti basterà inserire i nuovi tag e gli handler e richiamare sempre la stessa funzione che, indipendentemente da chi la chiama farà il suo lavoro.

    Se invece in corrispondenza di altri eventi vuoi che vengano effettuate azioni diverse, allora dovrai scrivere delle altre function che le eseguano e farle chiamare dagli handler dei nuovi eventi che vuoi gestire.

    Insomma si tratta di chiarirsi bene le idee sulle azioni che ogni function deve compiere e poi svilupparle una ad una cercando sempre di assegnare ad ogni function compiti piccoli e circoscritti in modo che sia facile manutenerle.

    Tieni presente poi che un handler può richiamare più function (basta metterle una di seguito all'altra separate da punti e virgola) e che una function ne può richiamare a sua volta delle altre (basta scriverne il nome, con le due parentesine finali e l'eventuale passaggio di parametri) e questo permette di avere strutture formate da tante piccole function che eseguono solo compiti specifici.

    No, non ho skype.

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

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.