Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [selettore data nascita per form] : anno sbagliato

    ciao a tutti

    sto sperimentando questo selettore di date nascita per i form
    http://javascript.internet.com/time-...-selector.html

    devo dire che è molto utile ma ho un problema...
    Selezionata una data, per esempio October - 10 - 2010 il "valore" della option degli anni mi ritorna 2009, ossia un anno in meno (-1), ho provato a mettere mano alla porzione di codice che setta il valore delle option degli anni, ma non riesco proprio a farmi tornare l'anno giusto..

    Per evitarvi "sbattimenti" vi posto il codice completo :
    codice:
    var date_arr = new Array;
    var days_arr = new Array;
    
    date_arr[0]=new Option("January",31);
    date_arr[1]=new Option("February",28);
    date_arr[2]=new Option("March",31);
    date_arr[3]=new Option("April",30);
    date_arr[4]=new Option("May",31);
    date_arr[5]=new Option("June",30);
    date_arr[6]=new Option("July",31);
    date_arr[7]=new Option("August",30);
    date_arr[8]=new Option("September",30);
    date_arr[9]=new Option("October",31);
    date_arr[10]=new Option("November",31);
    date_arr[11]=new Option("December",30);
    
    function fill_select(f)
    {
            document.writeln("<SELECT name=\"months\"               onchange=\"update_days(FRM)\">");
            for(x=0;x<12;x++)
                    document.writeln("<OPTION value=\""+date_arr[x].value+"\">"+date_arr[x].text);
            document.writeln("</SELECT><SELECT name=\"days\"></SELECT>");
            selection=f.months[f.months.selectedIndex].value;
    }
    
    function update_days(f)
    {
            temp=f.days.selectedIndex;
            for(x=days_arr.length;x>0;x--)
            {
                    days_arr[x]=null;
                    f.days.options[x]=null;
             }
            selection=parseInt(f.months[f.months.selectedIndex].value);
            ret_val = 0;
            if(f.months[f.months.selectedIndex].value == 28)
            {
                    year=parseInt(f.years.options[f.years.selectedIndex].value);
                    if (year % 4 != 0 || year % 100 == 0 ) ret_val=0;
                    else
                            if (year % 400 == 0)  ret_val=1;
                            else
                                    ret_val=1;
            }
            selection = selection + ret_val;
            for(x=1;x < selection+1;x++)
    
            {
                    days_arr[x-1]=new Option(x);
                    f.days.options[x-1]=days_arr[x-1];
            }
            if (temp == -1) f.days.options[0].selected=true;
            else
                 f.days.options[temp].selected=true;
    }
    function year_install(f)
    {
            document.writeln("<SELECT name=\"years\" onchange=\"update_days(FRM)\">")
            for(x=2001;x<2101;x++) document.writeln("<OPTION value=\""+x+"\">"+x);
            document.writeln("</SELECT>");
            update_days(f)
    }
    la funzione year_install è la responsabile della creazione dei valori option degli anni :

    codice:
    function year_install(f)
    {
            document.writeln("<SELECT name=\"years\" onchange=\"update_days(FRM)\">")
            for(x=2001;x<2101;x++) document.writeln("<OPTION value=\""+x+"\">"+x);
            document.writeln("</SELECT>");
            update_days(f)
    }
    il ciclo for da il valore in automatico con OPTION value=\""+x+"\">... ma non c'è modo di aggiungergli un +1 o altro, se no non visualizza più i select list... qualcuno riesce a metterlo a posto? Mi sarebbe molto molto utile... grazie mille...
    Perpetual Ribellion With Absolutely No Cause

  2. #2
    dentro a year_install:
    codice:
    <OPTION value=\""+x+1+"

  3. #3
    non funziona... imposto data a 1910 e mi scrive 1999..

    piuttosto.. a parte questo problema.. siccome devo scrivere i dati nel db, ho visto che mi fallisce un controllo sui mesi.. perchè le option del mese che vengono generate automaticamente hanno il valore pari al numero di giorni di cui è composto il mese... in pratica

    <option value="31">Dicembre</option>

    invece di

    <option value="12">Dicembre</option>

    ed è comprensibile visto che quei valori servono al ricalcolo automatico dei giorni contenuti nel mese che si seleziona... ma come posso fare per ottenere un valore buono per il mese da inserire nel db? Ho provato con un hidden value, ma se nei cicli for tento di aggiornare tale valore automaticamente mi scombina le select.. che casino ragazzi... come posso fare??
    Perpetual Ribellion With Absolutely No Cause

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Cos'e' "FRM" che usi spesso come parametro?
    Come richiami la prima volta la funzione year_install(???qui_che_ci_metti???)
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    hai ragione... scusa è la parte html :
    codice:
    <FORM name="FRM" action="form_check.php" method="post">
    
    <h1 align=center>JavaScript date selector</h1>
    
    
    
    
    
    
    
    <table align="center">
    
    <tr>
    
    <td>
    
    <SCRIPT>fill_select(document.FRM);year_install(document.FRM)</script></td>
    
    
    </tr></table>
    
    <input type="submit" name="submit" value="invia" />
    
    </FORM>
    Perpetual Ribellion With Absolutely No Cause

  6. #6
    FRM era il nome del form, e la funzione year_install la richiamo da

    <SCRIPT>fill_select(document.FRM);year_install(doc ument.FRM)</script>

    è tutto incluso in un unico file nel link seguente da cui l'ho preso :
    http://javascript.internet.com/time-...-selector.html

    ho solo aggiunto un

    action="form_check.php" method="post"

    al form per fare poi il check dei valori inviati, ossia "days", "months" e "years", e da li mi sono accorto che un check mi falliva perchè invece di trovarsi un valore da 1 a 12 per i mesi si trovava con un valore da 1 a 31 (o 30 e 28), dato appunto dal numero di giorni nel mese selezionato...
    Perpetual Ribellion With Absolutely No Cause

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ti dico la prima cosa che mi viene in mente... ti crei una struttura dati che associa ad ogni mese il numero corrispondente (gennaio:1,febbraio:2 ecc...), prima di inviare i dati a php passi per una funzione javascript che si occupa di:

    - recuperare dalla select il mese selezionato, quindi il testo e non il value
    - accedere alla struttura dati per trovare il numero corrispondente
    - valorizzare un campo hidden con il numero estratto
    - effettuare il submit alla risorsa php

  8. #8
    Allora, ho apportato delle modifiche, questa è la parte js :
    codice:
    var date_arr = new Array;
    var days_arr = new Array;
    var date_a = new Array;
    
    date_arr[0]=new Option("1",31);
    date_arr[1]=new Option("2",28);
    date_arr[2]=new Option("3",31);
    date_arr[3]=new Option("4",30);
    date_arr[4]=new Option("5",31);
    date_arr[5]=new Option("6",30);
    date_arr[6]=new Option("7",31);
    date_arr[7]=new Option("8",30);
    date_arr[8]=new Option("9",30);
    date_arr[9]=new Option("10",31);
    date_arr[10]=new Option("11",30);
    date_arr[11]=new Option("12",31);
    var monthnumber;
    
    function fill_select(f)
    {
            document.writeln("<SELECT name=\"months\"               onchange=\"update_days(FRM)\">");
            for(x=0;x<12;x++)
                    document.writeln("<OPTION value=\""+date_arr[x].value+"\">"+date_arr[x].text);
            document.writeln("</SELECT><SELECT name=\"days\"></SELECT>");
            selection=f.months[f.months.selectedIndex].value;
    	  this.monthnumber = f.months[f.months.selectedIndex].text;
    }
    
    function update_days(f)
    {
            temp=f.days.selectedIndex;
            for(x=days_arr.length;x>0;x--)
            {
                    days_arr[x]=null;
                    f.days.options[x]=null;
             }
            selection=parseInt(f.months[f.months.selectedIndex].value);
            ret_val = 0;
            if(f.months[f.months.selectedIndex].value == 28)
            {
                    year=parseInt(f.years.options[f.years.selectedIndex].value);
                    if (year % 4 != 0 || year % 100 == 0 ) ret_val=0;
                    else
                            if (year % 400 == 0)  ret_val=1;
                            else
                                    ret_val=1;
            }
            selection = selection + ret_val;
            for(x=1;x < selection+1;x++)
    
            {
                    days_arr[x-1]=new Option(x);
                    f.days.options[x-1]=days_arr[x-1];
            }
            if (temp == -1) f.days.options[0].selected=true;
            else
                 f.days.options[temp].selected=true;
    }
    function year_install(f)
    {
            document.writeln("<SELECT name=\"years\" onchange=\"update_days(FRM)\">")
            for(x=2001;x<2101;x++) document.writeln("<OPTION value=\""+x+"\">"+x);
            document.writeln("</SELECT>");
            update_days(f)
    }
    
    function set_hid_value()
    {
    	document.FRM.getElementById("hid_field").value = this.monthnumber;
    }
    ho aggiunto una variabile generica : var monthnumber;

    dopo di chè ho aggiunto un'istruzione alla funzione fill_select(f), ossia:
    this.monthnumber = f.months[f.months.selectedIndex].text;

    assegnando alla variabile monthnumber il "testo" del mese contenuto nell'array date_arr.

    e ho aggiunto una funzione per scrivere tale valore nel campo hidden della mia form:
    codice:
    function set_hid_value()
    {
    	document.FRM.getElementById("hid_field").value = this.monthnumber;
    }
    la parte html è cambiata in:
    codice:
    <table align="center">
    <tr>
    <td>
    <SCRIPT>fill_select(document.FRM);year_install(document.FRM)</script></td>
    <td><input type="hidden" name="hid_field" id="hid_field" value="" /></td>
    </tr><tr><td>
    <input type="submit" name="submit" value="submit" onClick = "set_hid_value();"/>
    </td></tr></table>
    </FORM>
    impostando l'input hidden e assegnando all'onClick del pulsante submit il compito di eseguire set_hid_value, il quale va allo script php con un semplice $_POST['hid_field']. La logica mi sembra buona.. ma purtroppo non mi ritorna il valore di hid_field...
    Perpetual Ribellion With Absolutely No Cause

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    fill_select viene richiamata al caricamento della pagina non ti serve a nulla valorizzare in quel punto la variabile monthnumber.

    codice:
    function set_hid_value()
    {
    	document.FRM.getElementById("hid_field").value = document.FRM.months[document.FRM.months.selectedIndex].text;
    document.FRM.submit();
    }
    questo dovrebbe bastarti...

    edit: inoltre se usi l'evento onclick non usare il type submit ma button e fai il submit con javascript

    <input type="button" name="mybutton" value="submit" onClick = "set_hid_value();"/>

  10. #10
    no niente da fare.. inoltre il document.FRM.submit(); non invia il form, lo invia solo se mantengo il submit type="submit" del pulsante, e continua a non stampare il valore hidden, gli altri vengono correttamente passati...
    Perpetual Ribellion With Absolutely No Cause

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.