Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    6

    All'onclick passa all' opzione successiva di una select.

    Salve a tutti. Non sono esperta di Javascript ma sbirciando qui e li sono riuscita a tirare fuori qualcosa... solo che ora sono bloccata su un errore che non capisco .

    Sto realizzando una specie di lettore mp3 utilizzando le opzioni di una form come playlist in questo modo:

    codice:
          <form id="menu" style="display:none;"> 
          <select id="selettore" size="5">
          <OPTION value="file01.mp3">01 - Artista e Titolo</OPTION>
          <OPTION value="file02.mp3">02 - Artista e Titolo</OPTION>
          <OPTION value="file03.mp3">03 - Artista e Titolo</OPTION>
          <OPTION value="file04.mp3">04 - Artista e Titolo</OPTION>
          </select>
          </form>

    Associato a questo script:

    codice:
    window.onload = function autostart() {
          document.getElementById('mediaplayer').filename = document.forms['menu'].selettore.options[0].value;
          document.getElementById('scroller').innerHTML = document.forms['menu'].selettore.options[0].text;
       }  
    
    function avanti(){
       var numop = document.forms['menu'].selettore.options.length; //recupero il numero di opzioni nel menu
       for (var i=0; i<numop; i++){
       document.getElementById('mediaplayer').filename = document.forms['menu'].selettore.options[i].value;
       document.getElementById('scroller').innerHTML = document.forms['menu'].selettore.options[i].text;;
       }
       }
    Ovviamente c'è anche l'object chiamato mediaplayer con il <param name="filename" value=""> e un marquee chiamato "scroller" destinato a Titolo e Artista della canzone in esecuzione che evito di riportare.

    Il problema è questo. La funzione avanti (che è richiamata da un' immagine
    [img]cambia.jpg[/img] ) vorrei che mi facesse passare dall' opzione di partenza a quella successiva invece non so come mai passa direttamente dalla 0 all'ultima. Sicuramente è sbagliato il ciclo for ma non ho idea di come fare!!!!

    Qualche suggerimentoo!?!?!
    Ah dimenticavo... da scartare l'evento onchange sulla select perchè per motivi che non sto qui a spiegare il form non è visibile.

    Grazie in anticipo a tutti .

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

    basati sempre sull' opzione selezionata
    codice:
    var sel=document.forms['menu'].selettore;
    var numop = sel.options.length;
    var selezionata = sel.selectedIndex;
    // seleziona la prossima se l' option selezionata al momento non e' l' ultima
    // altrimenti torna alla prima opzione 
    sel.selectedIndex=(++selezionata<numop)?selezionata:0;
    document.getElementById('mediaplayer').filename = sel.options[sel.selectedIndex].value;
    document.getElementById('scroller').innerHTML = sel.options[sel.selectedIndex].text;
    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    6
    Perchè ciclo? Ehhh buuuh ora pretendi troppo! Il ciclo mi sembrava la cosa che si avvicinava di più a quello che volevo... evidentemente sbagliavo. Non ho ben capito il perchè però funziona (ovviamente dirai tu :P)!!!! Anzi va anche meglio del previsto perchè dopo l'ultima riparte da capo e nn si blocca!

    Ti adoroooooooooooooooooooo!!!! Grazie grazie grazie grazie grazie grazieeeeeeeee!!! Da oggi sarai il mio guru personale.

    Volendo fare il tastino indietro mi basta cambiare ++ in -- ? Adesso provo e lo scopro. Grazie ancora e visto che la sto ancora ideando nel caso ritorno :P.


    Edit. Si funzia così!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    6
    No, riguardo al tasto indietro ho detto una castronata :P. Mi va bene anche così ma ora solo per mia curiosità vorrei capire meglio come funziona la cosa.

    Questo pezzo

    sel.selectedIndex=(++selezionata<numop)?selezionat a:0;

    dice che per ottenere la mia variabile (sel.selected.Index) devo prendere l'indice selezionato e incrementarlo di un unità fino a che resta sotto al numero delle opzioni massime disponibili(++selezionata<numop) se è maggiore o uguale ricomincia da zero. (?selezionata:0.


    Di conseguenza per fare l'indietro dovrei fare una cosa così

    sel.selectedIndex=(--selezionata==0)?selezionata:numopz;

    Cioè torna indietro fino che arrivo a zero e poi riparti dal numero massimo di opzioni disponibili.... ma non funzia :P.

    Non è urgente questo... quindi quando avrai tempo e voglia magari me lo spieghi !

    Grazie ancora ciao.

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    sel.selectedIndex=(--selezionata<0)?numop-1:selezionata;

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    6
    Perfetto!!!! Sei stato gentilissimo .
    Ciaoooo

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 © 2024 vBulletin Solutions, Inc. All rights reserved.