document.getElementsByClassName non funziona

Discussione in 'Javascript' iniziata da PHP, 4 Giugno 2013.

  1. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Non riesco a capire perchè questo script semplicissimo non funziona:
    Codice:
    	document.getElementsByClassName('prova').setAttribute("style", "background: white;");
    Se provo a farlo per id funziona:
    Codice:
    	document.getElementById('prova').setAttribute("style", "background: white;");
    ma visto che per id dovrei crearne uno per ogni elemento non va bene. Dove sbaglio?
     
  2. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
  3. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Grazie della risposta, adesso funziona ma mi dà un piccolo problema che non avevo previsto.
    Andando sul primo link, si attiva la funzione prova a tutti gli elementi che presentano quella classe. Se si và con il mouse sul primo elemento cambia colore, ma lo fanno anche il 2o e il 3o ad esempio. Come blocco questa catena?
     
  4. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Tu vuoi che solo l'elemento selezionato cambi colore?
     
  5. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Esatto, avevo pensato di dare ad ognuno un id diverso, ma visto che devono avere gli stessi attributi avevo pensato ad una classe, ma è uscito quest'altro problema.
     
  6. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
  7. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Ti spiego, io ho fatto il menù da 0 con i css, poi ho creato javascript per tenere selezionato('solo come effetto ottico') la voce del menu principale che aveva aperto i sottomenu sui quali adesso si è spostato il mouse.
    Alla fine ottengo due effetti hover, uno sul menù principale e uno sul sottomenu selezionati.
    Come mi hai fatto tu l'effetto ottengo quello di partenza che avevo con i css, e quello con jquery mi sembra un'alternativa ai css(che in effetti ottengo con molto meno codice di javascirpt, ma non era tutto il contrario?:confused:)
    Comunque ho capito che il problema è che avendo la stessa classe tutti gli elementi vengono influenzati con lo stesso effetto contemporaneamente, cosa che non succederebbe con l'id ad esempio, ma vorrei evitare di creare 4-5 id diversi per poi fare copia e incolla e cambiare solo il nome, visto che devono avere lo stesso effetto.
    Non è possibile fare una specie di array e distinguere tutte le chiamate che vengono fatte sulla stessa classe? In questo modo metterei [0], ecc e risolverei il problema.
     
  8. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Forse ho capito, devo trovare il modo di estrarre solo l'array del menu corrispondente e non estrarre tutto $i.
    Provo poi ti faccio sapere, nel frattempo dimmi se sei d'accordo o meno
     
  9. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
  10. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Perfetto, non conoscevo questa dicitura nel css ">", funziona alla grande, propio quello che cercavo. Grazie a te javascript l'ho ridotto all'osso, adesso fà in modo solo che il menù non scompaia subito se si esce per sbagli con il mouse fuori dal menu.:byebye:
     
  11. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
  12. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ultima modifica: 4 Giugno 2013
  13. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
  14. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Grazie della risposta, ho provato i tuoi esempi, ma non ottengo lo stesso effetto che ho con javascript (riesco a ritardare l'entrata del menù agendo sull'hover, ma non la sua scomparsa). Ho cercato su google e ho provato a rifarlo, basandomi sul css che mi hai dato e ho provato ad aggiungere anche "ease-in-out" su alcuni comandi. Farò altri entativi prima di abbandorare questa strada, perchè credo che se funzioni sia meglio un css per una cosa del genere che javascript. Grazie per l'aiuto che mi stai dando.
     
  15. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Scusa funzionava solo su Chrome, questo va dappertutto da quanto ho visto:

    http://jsfiddle.net/NfzAe/17/

    Ho anche aggiunto una parte di codice per fare in modo che sparisca subito il submenu se si va su un'altra voce di menu.
     
  16. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Grazie per la correzione, adesso riesco a vedere l'effetto, ma non riesco ad adattarlo a #prova. Ho provato ad usare nav dentro il menu, ma non mi dà l'effetto voluto, o meglio lo dà, ma mi crea sproporzioni, prima il menu mi dà l'effetto, ma mi stampa solo 4 campi, invece di 10 e lo stesso solo all'effetto "out" crea magicamente i menu mancanti e poi scompare al termine dei secondi prestabiliti, poi se stampa tutti i valori, all'effetto out la composizione si rovina, cambiando da un effetto "colonna" ad uno "riga", quando ho specificato ovunque l'effetto display: block, e visto hc eho levato ogni altro displai diverso non sò propio da dove prenda il valore che causa la sproporzione, poi ho provato a cambiare "<div id=prova><nav>.." semplicemente in <nav>, dando a nav i valori di prova e niente, poi ho provato a integrare nav dentro prova togliendolo lasciando così solo <div id=prova>, ecc.
    Ci sono stato due ore e mezza circa:crying:. Come devo fare? Dimenticavo, ovviamente non ho cambiato solo il nome tra nav e #prova, ma ho riscritto pure la sintassi del css per renderla compatibile, altrimenti non stampa nulla ovvio. Scusa per la seccatura, questa è l'ultima cosa che ti chiedo sull'argomento.
     
  17. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Non ho capito niente, cosa vuoi ottenere?
     
  18. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Cambiare nav in #prova.
     
  19. Fez Vrasta

    Fez Vrasta Utente Attivo

    Registrato:
    11 Maggio 2013
    Messaggi:
    409
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    sostituisci tutti i "nav" con "#prova" e sostituisci <nav> con <div id="prova">

    comunque è meglio tenere nav, è l'elemento pensato apposta per i menu
     
  20. PHP

    PHP Utente Attivo

    Registrato:
    9 Maggio 2013
    Messaggi:
    105
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Se faccio delle sostituzioni di nav con #prova, il menu comincia a sballarmi gli elementi. Comunque credo di aver capito il problema. Ho applicato ovunque una transiione, per vedere dove funzionava e dove non, e il risultato è che funziona ovunque tranne che quando si esce fuori dal menu con il mouse.
    Ho visto nel tuo esempio che è "nav > ul > li > ul" ad influenzare la scomparsa del menu dopo i ltempo specificato, ma con me questo non funziona. Se al posto di "nav >ul > li > ul" metto "#prova ul li ul", l'effetto che ottengo è solo quello di ritardare l'effetto al passaggio del mouse, quindi ottendo un ritardo di un hover, non di un out.
     
Sto caricando...

Condividi questa Pagina