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

    Problema Anno Bisestile JS --HELP--

    Ciao a tutti raga, ho un problema da risolvere negli esercizi di un esame. Come avete letto nel titolo si tratta di calcolare l'anno bisestile in un form di registrazione dove l'utente deve inserire la propria data di nascita, inoltre il menu (anno, mese e giorno) deve essere attivato sequenzialmente con una "select&go". Di fatti per la "select&go" non ho avuto problemi, infatti l'unico campo attivo è l'anno, poi dopo aver selezionato l'anno mi attiva il mese e successivamente il giorno. Qui viene il bello (brutto)...se seleziono un anno bisestile mi dovrebbe stampare automaticamente i mesi con i relativi giorni di febbraio (29 se è bisestile 28 se non lo è...). Qui di seguito vi posto ciò che ho fatto finora, manca tutta la parte di controllo dell'anno bisestile. Perdonate la mia scarsissima preparazione in merito, ma se lo sapevo fare non vi avrei chiesto aiuto :-) ...Vi ringrazio fin d'ora per la disponibilità.
    codice:
    <html>
    	<head>
    	<title>Esame</title>
    	<script language="javascript" src="abilita.js"></script>
    	</head>
    
    	<body>
    		<form name="modulo" method="POST" action="registra.php">
    			<table>
    				<tr>
    					<td>
    						<fieldset>
    							<legend align="center">Dati Registrazione</legend>
    								<table>
    									<tr>
    										<td>Login</td><td><input type="text" name="login"></td>
    									</tr>	
    								
    									<tr>
    										<td>Password</td><td><input type="text" name="password1"></td>
    									</tr>	
    									
    									<tr>
    										<td>Password</td><td><input type="text" name="password2"></td>
    									</tr>
    									
    									<tr>
    										<td>Email</td><td><input type="text" name="email"></td>
    									</tr>
    								</table>
    						</fieldset>	
    				</td>
    				
    				<td>
    					<fieldset><legend align="center">Dati Personali</legend>
    						<table>
    							<tr>
    								<td>Cognome:</td>
    								<td><input type="text" name="cognome"></td>
    							</tr>	
    							<tr>
    								<td>Nome:</td>
    								<td><input type="text" name="nome"></td>
    							</tr>	
    							<tr>
    								<td>Codice Fiscale:</td>
    								<td><input type="text" name="CF"></td>
    							</tr>
    							<tr>
    								<td>Data</td>
    								
    								<td>
    									<select name="anno" onchange=abilita("mese")>
    										<option selected>Anno
    											<script type="text/javascript">
    												for(var i=1900; i<=1990; i++)
    													document.write("<option value="+i+">"+i);
    											</script>
    									</select>	
    								</td>
    							
    							
    							
    							</tr>
    							<tr>
    								<td>di</td>
    								<td>
    									<select name="mese" disabled onchange=abilita("giorno")>
    										<option selected>Mese
    										<option value="1">Gennaio
    										<option value="2">Febbraio
    										<option value="3">Marzo
    										<option value="4">Aprile
    										<option value="5">Maggio
    										<option value="6">Giugno
    										<option value="7">Luglio
    										<option value="8">Agosto
    										<option value="9">Settembre
    										<option value="10">Ottobre
    										<option value="11">Novembre
    										<option value="12">Dicembre
    									</select>
    								</td>
    							
    							</tr>
    							<tr>
    								<td>Nascita</td>
    								<td>
    									<select name="giorno" disabled>
    										<option selected>Giorno
    											<script type="text/javascript">
    												for(var i=1; i<=31; i++)
    													document.write("<option value="+i+">"+i);
    											</script>
    									</select>	
    								</td>
    							</tr>
    						</table>
    					</fieldset>
    				</td>
    			</tr>
    			<tr>
    				<td colspan="2" align="center">
    					<input type="submit" value="Invia Dati">
    					<input type="reset" value="Cancella">
    				</td>
    			</tr>
    		</table>
    	</form>		
    	</body>
    </html>

    LA FUNZIONE ABILITA.JS RICHIAMATA NELL'HEAD E' LA SEGUENTE:
    codice:
    function abilita(x) {
    	var elem = document.modulo[x];
    	elem.removeAttribute("disabled"); }

    Spero di ricevere suggerimenti utili. Grazie ancora.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Interessa tanto anche a me ancora nessuna risposta?

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    interessa anche a te applicare un sistema del genere?
    (che e' impostato male: e con i 30 e 31 giorni come fai?)
    o semplicemente determinare se un anno e' bisestile?

    io con le date preferisco non fare calcoli o portarmi dietro array
    ma verificare se un' ipotetica data e' plausibile
    codice:
    function isLeapYear(yr) {
      return new Date(yr,2-1,29).getDate()==29;
    }
    questa richiamata con
    isLeapYear(2008) ritorna true
    isLeapYear(2007) ritorna false

    ciao

  4. #4
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    http://it.wikipedia.org/wiki/Anno_bisestile

    Su Wikipedia c'è scritto:
    (((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) && (anno % 4000 != 0))

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Xinod scusami mi interessa perchè io e lifeisnow stiamo facendo la stessa prova d'esame e per risponderti al quesito è che noi oltre a controllare l'anno bisestile dobbiamo far stampare in una select il giusto numero di giorni di febbraio e lo stesso vale per i mesi di 30gg.Per questo ci serve quel tipo di Funzione.Potete aiutarci grazie anticipatamente.HELP!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    5

    idem

    anche io sto facendo lo stesso esame e non riesco a far stamapare nella select giorno il giusto numero di giorni questo è il mio codice lo script abilita.js è uguale a quello degli altri ragazzi:
    <html>

    <head>
    <title>Inserimento dati</title>
    <script language="javascript" src="abilita.js"></script>
    </head>

    <body>

    <form name="dati" method="POST" action="registra.php">
    <table>
    <tr>
    <td>
    <fieldset>
    <legend align="center">Dati Registrazione</legend>
    <table>
    <tr><td>Login</td> <td><input type="text" name="login" focus();></td></tr>
    <tr><td>Password</td> <td><input type="text" name="password"></td></tr>
    <tr><td>Password</td> <td><input type="text" name="password1"></td></tr>
    <tr><td>Email</td> <td><input type="text" name="email"></td></tr>
    </table>
    </fieldset>
    </td>
    <td>
    <fieldset>
    <legend align="center">Dati Personali</legend>
    <table>
    <tr><td>Cognome: </td> <td><input type="text" name="cognome"></td></tr>
    <tr><td>Nome: </td> <td><input type="text" name="nome"></td></tr>
    <tr><td>Codice Fiscale: </td> <td><input type="text" name="cf"></td></tr>
    <tr><td>Data</td>
    <td>
    <select name="anno" onchange=abilita("mese")>
    <option selected>Anno</option>
    <script type="text/javascript">
    for(var i=1900; i<=1990; i++)
    document.write("<option value="+i+">"+i+"</option>");
    </script>
    </select>
    </td>
    </tr>
    <tr><td>di</td>
    <td>
    <select name="mese" disabled onchange=abilita("giorno")>
    <option value="0" selected>Mese</option>
    <option value="1">Gennaio</option>
    <option value="2">Febbraio</option>
    <option value="3">Marzo</option>
    <option value="4">Aprile</option>
    <option value="5">Maggio</option>
    <option value="6">Giugno</option>
    <option value="7">Luglio</option>
    <option value="8">Agosto</option>
    <option value="9">Settembre</option>
    <option value="10">Ottobre</option>
    <option value="11">Novembre</option>
    <option value="12">Dicembre</option>
    </select>
    </td>
    </tr>
    <tr><td>nascita</td>
    <td>
    <select name="giorno" disabled>
    <option value="0" selected>Giorno
    <script type="text/javascript">

    var month=document.dati.mese.options[document.dati.mese.selectedIndex].value;
    var year=document.dati.anno.options[document.dati.anno.selectedIndex].value
    if(month==2){
    if(((year%4==0 && year%100!=0) || year%400==0) && (year%4000!=0)){
    for(var i=1; i<=29; i++)
    document.write("<option value="+i+">"+i+"</option>");}
    else
    for(var i=1; i<=28; i++)
    document.write("<option value="+i+">"+i+"</option>");
    }
    else
    if(month==4||month==6||month==9||month==11){
    for(var i=1; i<=30; i++)
    document.write("<option value="+i+">"+i+"</option>");
    }
    else{
    for(var i=1; i<=31; i++)
    document.write("<option value="+i+">"+i+"</option>");}
    </script>
    </select>
    </td>
    </tr>
    </table>
    </fieldset>
    </td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="Invia Dati">
    <input type="reset" value="Cancella">
    </td>
    </tr>
    </table>
    </form>

    </body>

    </html>
    function abilita(x) {
    var elem = document.modulo[x];
    elem.removeAttribute("disabled"); }

  7. #7

    Re: idem

    Originariamente inviato da osmosi
    anche io sto facendo lo stesso esame e non riesco a far stamapare nella select giorno il giusto numero di giorni questo è il mio codice lo script abilita.js è uguale a quello degli altri ragazzi:
    Con tutto il rispetto parlando per voi, va bene che siamo nella stessa barca, ma qui si cercavano soluzioni, non altre richieste. Se qualcuno dovesse risponde alla mia richiesta, lo potete leggere tranquillamente, e come voi qualsiasi altra persona da ogni parte del mondo. Non fate in modo che qualche OP mi chiuda il post per le richieste replicate, non ce n'è bisogno, non l'ho aperto per farmelo chiudere. Grazie.

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    tranquillo che le discussioni non vegono chiuse per via altre persone che richiedono la stessa cosa, a patto che si tratti realmente di utenti diversi...

    comunque,
    document.write va bene per scrivere cose nel documento quando questo si sta "costruendo",
    una volta terminata questa fase qualsiasi ulteriore richiamo a document.write sovrascrive l' intero documento con quanto presente nel document.write,
    che sicuramente non e' quello che serve in questo caso

    ci sono invece altre strade e tra queste quella che sicuramente e' piu' al vostro livello e' l' innerHTML
    serve un elemento contenitore (identificato da un id) di cui (ri)scrivere il contenuto
    es.
    codice:
    function generaGiorni(quanti){
    	var str='<select name="giorno">\n<option value="0">Giorno</option>';
    	for(var q=1;q<=quanti;q++){
    		str+='\n<option value="'+q+'">'+q+'</option>';
    	}
    	str+='\n</select>';
    	document.getElementById('giorni').innerHTML=str;
    }
    </script>
    codice:
    generaGiorni(28)
    <form>
    <div id="giorni"></div>
    <script type="text/javascript">generaGiorni(31);</script>
    </form>
    ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    5

    ecco la soluzione

    Ecco risolto il problema!
    Xinod grazie per l'aiuto ma non era quella la soluzione richiesta dal nostro esercizio.
    a chi interessa a me così funziona :
    Codice PHP:
    <html

    <
    head>
      <
    title>Inserimento dati</title>

    </
    head>

    <
    body onload="document.dati.login.focus()">

    <
    script language="javascript" type="text/javascript"
      function 
    abilita(x) {
        var 
    elem document.dati[x];
        
    elem.removeAttribute("disabled"); 
        }

    function 
    giorni(mese) { 
       var 
    giorni
       var 
    giorni_init document.getElementById('giorno').options.length
       var 
    anno document.getElementById('anno').options[document.getElementById('anno').selectedIndex].text

       for(
    j=1j<giorni_initj++) { 
          
    document.getElementById('giorno').options[1] = null
       } 

       if ( 
    mese == 2  ) { 
          if ( (
    anno%400==0) || ((anno%4==0) && (anno%100!=0)) ) { 
          
    giorni 29
         } else { 
          
    giorni 28
         } 
       } else if ( 
    mese == || mese == || mese == || mese == 11 ) { 
          
    giorni 30
       } else { 
          
    giorni 31
       } 

       for(
    i=1i<=giornii++) { 
          
    giorno = new Option(i); 
          
    document.getElementById('giorno').options[i] = giorno
       } 

    </script> 

    <form name="dati" method="POST" action="registra.php">
        <table>
            <tr>
                        <td>
                            <fieldset>
                  <legend align="center">Dati Registrazione</legend>
                    <table>
                      <tr><td>Login</td> <td><input type="text" name="login" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'" onblur="this.style.backgroundColor='white'"></td></tr>
                      <tr><td>Password</td> <td><input type="text" name="password" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'"></td></tr>
                      <tr><td>Password</td> <td><input type="text" name="password1" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'"></td></tr>
                      <tr><td>Email</td> <td><input type="text" name="email" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'"></td></tr>
                    </table>
                             </fieldset>
              </td>
                        <td>
                            <fieldset>
                  <legend align="center">Dati Personali</legend>
                    <table>
                      <tr><td>Cognome: </td> <td><input type="text" name="cognome" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'"></td></tr>
                      <tr><td>Nome: </td> <td><input type="text" name="nome" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'"></td></tr>
                      <tr><td>Codice Fiscale: </td> <td><input type="text" name="cf" onfocus="this.style.backgroundColor='red'" onblur="this.style.backgroundColor='white'"></td></tr>
                      <tr><td>Data</td> 
                          <td>
                            <select name="anno" id="anno" onchange=abilita("mese") onblur=giorni(document.getElementById('mese').options[document.getElementById('mese').selectedIndex].value)>
                                <option>Anno</option>
                                <script type="text/javascript">
                                  for(var i=1900; i<=1990; i++)
                                    document.write("<option value="+i+">"+i+"</option>");
                                </script>
                            </select>    
                          </td>
                                        </tr>
                      <tr><td>di</td> 
                          <td>
                            <select name="mese" id="mese" disabled onchange=abilita("giorno") onblur=giorni(this.options[this.selectedIndex].value)>
                              <option>Mese</option> 
                              <option value="1">Gennaio</option>
                              <option value="2">Febbraio</option>
                              <option value="3">Marzo</option>
                              <option value="4">Aprile</option>
                              <option value="5">Maggio</option>
                              <option value="6">Giugno</option>
                              <option value="7">Luglio</option>
                              <option value="8">Agosto</option>
                              <option value="9">Settembre</option>
                              <option value="10">Ottobre</option>
                              <option value="11">Novembre</option>
                              <option value="12">Dicembre</option>
                                        </select>
                          </td>
                      </tr>
                      <tr><td>nascita</td> 
                          <td>
                            <select name="giorno" id="giorno" disabled onfocus=giorno()>
                                  <option>Giorno</option> 
                                  <option>1</option> 
                                  <option>2</option> 
                                  <option>3</option> 
                                  <option>4</option> 
                                  <option>5</option> 
                                  <option>6</option> 
                                  <option>7</option> 
                                  <option>8</option> 
                                  <option>9</option> 
                                  <option>10</option> 
                                  <option>11</option> 
                                  <option>12</option> 
                                  <option>13</option> 
                                  <option>14</option> 
                                  <option>15</option> 
                                  <option>16</option> 
                                  <option>17</option> 
                                  <option>18</option> 
                                  <option>19</option> 
                                  <option>20</option> 
                                  <option>21</option> 
                                  <option>22</option> 
                                  <option>23</option> 
                                  <option>24</option> 
                                  <option>25</option> 
                                  <option>26</option> 
                                  <option>27</option> 
                                  <option>28</option> 
                                  <option>29</option> 
                                  <option>30</option>   
                                  <option>31</option> 

                            </select>
                          </td>
                      </tr>
                    </table>
                             </fieldset>
              </td>
            </tr>
            <tr>
              <td colspan="2" align="center">
                <input type="submit" value="Invia Dati">
                <input type="reset" value="Cancella">
              </td>
            </tr>
        </table>
    </form>

    </body>

    </html> 

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.