Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    536

    onchange in select per 2 funzioni. Si può?

    allora

    ho questo codice che tramite php e mysql riempie il menu della select:

    Codice PHP:
    ........


     
    $option .= '<option value="'.$rowgg['valore'].'">' $rowgg['scritta'] . '</option>'
    }
    echo 
    '<select name="incremento" onchange="validami(this, 7)"></option>' $option '</select>';  
        
    ?>


    ......... 
    per la settima voce si attiva una funzione javascript, questa:

    codice:
    <script type="text/javascript">
    function validami(sel, index){
    if(sel.selectedIndex==index){
    sel.form.datafinale.disabled=true; sel.form.datafinale.value='';
    sel.form.calcola.disabled=true;
    }
    else{
    sel.form.datafinale.disabled=false;
    sel.form.calcola.disabled=false;
    };
    }
    </script>
    ora vorrei richiamare un'altra funzione per le altre precedenti 6 voci che attualmente viene richiamata cliccando un bottone. La funzione in oggetto è questa:

    codice:
      function DataValida(stringa, formatoItaliano){
    
               
                  if (stringa.length != 10) {
    
                        return false;
    
                    }
    
                    var i;
    
                    for (i = 0; i < stringa.length; i++) {
    
                        var c = stringa.charAt(i);
    
                        // posizione 2 e 5 devono essere /.
    
                        if ((i == 2 && c != "/") || (i == 5 && c != "/")) {
    
                            return false;
    
                        }
    
                        // le altre devono essere numeri.
    
                        if ((i != 2 && i != 5) && ((c < "0") || (c > "9"))) {
    
                            return false;
    
                        }
    
                    }
    
                   
    
                    var splittata = stringa.split("/");
    
                    if (formatoItaliano == true) {
    
                        var gg = new Number(splittata[0])
    
                        var mm = new Number(splittata[1])
    
                    }
    
                    else {
    
                        var mm = new Number(splittata[0])
    
                        var gg = new Number(splittata[1])
    
                    }
    
                    var aa = new Number(splittata[2])
    
                   
    
                    /*Controllo mesi*/
    
                    if (mm < 1 || mm > 12) {
    
                        return false;
    
                    }
    
                   
    
                    //Bisestile
    
                    bisestile = false;
    
                    if (((aa % 4 == 0) && ((!(aa % 100 == 0)) || (aa % 400 == 0)))) {
    
                        bisestile = true;
    
                    }
    
                   
    
                    var arrMesi = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    
                    var maxg = arrMesi[mm - 1];
    
                    if ((mm == 2 && bisestile == true)) {
    
                        maxg = 29;
    
                    }
    
                    if (gg > maxg || gg == 0) {
    
                        return false;
    
                    }
    
                    return true;
    
                }
    
    
                function dateAdd(){
    
                    /*Formato data (variabile itaform true se formato gg/mm/aaaa false se formato mm/gg/aaaa) */
    
                    var itaform = true;
                    j_data = document.myform.inputdata.value
    
                   
    
                    /*Verifico che la data sia valida  */
    
                    if (DataValida(j_data, itaform) == false) {
    
                        alert('Data non valida');
    
                        return false;
    
                    }
    
    
                    /*Inverto giorno e mese per il calcolo */
    
                    if (itaform != false) {
    
                        var splittata = j_data.split("/");
    
                        j_data = (splittata[1] + "/" + splittata[0] + "/" + splittata[2]);
    
                    }
    
                    /*Verifico il valore da aggiungere sia intero numerico e diverso da 0*/
    
                    j_increm = parseInt(document.myform.incremento.value)
    
                    t_increm = document.myform.incremento.value;
    
                    if (isNaN(j_increm) || j_increm == '0' || j_increm == '' || j_increm != t_increm) {
    
                        alert('Valore da aggiungere non valido');
    
                        return false;
    
                    }
    
                    /*Estraggo il tipo di intervallo (variabile : t_intervallo) */
    
                            var t_intervallo = 'd';
    
                    /*Effettuo il calcolo */
    
                    j_increm = new Number(j_increm);
    
                    var dt = new Date(j_data);
    
                    switch (t_intervallo) {
    
                    
    
                        case "d":{// giorni
    
                            dt.setDate(dt.getDate() + j_increm);
    
                            break;
    
                        }
    
                    }
    
                    giorno = dt.getDate(dt)
    
                    if (giorno < '10') {
    
                        giorno = '0' + giorno
    
                    }
    
                    mese = dt.getMonth(dt) + 1
    
                    if (mese < '10') {
    
                        mese = '0' + mese
    
                    }
    
                    anno = dt.getFullYear(dt)
    
                    if (itaform == true) {
    
                        document.myform.datafinale.value = giorno + "/" + mese + "/" + anno;
    
                    }
    
                    else {
    
                        document.myform.datafinale.value = mese + "/" + giorno + "/" + anno;
    
                    }
    
                    return true;
    
                }
    Questa funzione in pratica mi calcola una data rispetto ad un'altra in base ai giorni inseriti (30gg, 60gg ecc ecc)

    Ricapitolando vorrei quindi richiamare questa ultima funzione per i primi 6 elementi della select e la prima funzione per l'ultimo elemento.

    Devo fare una fusione in una stessa funzione? Come? Non ne capisco molto di javascript.
    E' possibile invece richiamare funzioni differenti per la stessa select?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    fai una prova cosi:

    codice:
    <script type="text/javascript">
    function validami(sel, index){
    if(sel.selectedIndex==index){
    sel.form.datafinale.disabled=true; sel.form.datafinale.value='';
    sel.form.calcola.disabled=true;
    }
    else if(sel.selectedIndex < index){
    //chiamata metodo
    DataValida(stringa, formatoItaliano)
    }else{
    sel.form.datafinale.disabled=false;
    sel.form.calcola.disabled=false;
    };
    }
    </script>

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    536
    Originariamente inviato da Vindav
    fai una prova cosi:

    codice:
    <script type="text/javascript">
    function validami(sel, index){
    if(sel.selectedIndex==index){
    sel.form.datafinale.disabled=true; sel.form.datafinale.value='';
    sel.form.calcola.disabled=true;
    }
    else if(sel.selectedIndex < index){
    //chiamata metodo
    DataValida(stringa, formatoItaliano)
    }else{
    sel.form.datafinale.disabled=false;
    sel.form.calcola.disabled=false;
    };
    }
    </script>

    FUNZIONA!!!!!!!!
    Un'ultima cosa
    Vorrei fare in modo che per il primo (0 dovrebbe essere) elemento della select (c'è scritto solo "scegli") non venisse fatto niente o al limite azzerati il campo:

    sel.form.datafinale.value='';

    dovrebbe essere una cosa del genere (ma non ne sono sicuro...ripeto non conosco javascript:

    codice:
    <script type="text/javascript">
    function validami(sel, index){
    if(sel.selectedIndex==index){
    sel.form.datafinale.disabled=true; sel.form.datafinale.value='';
    sel.form.calcola.disabled=true;
    }
    else if((sel.selectedIndex < index)&&(sel.selectedIndex > 0)){
    //chiamata metodo
    dateAdd()
    }
    else if(sel.selectedIndex == 0){
    sel.form.datafinale.value='';
    }
    else{
    sel.form.datafinale.disabled=false;
    sel.form.calcola.disabled=false;
    };
    }
    </script>
    C'è qualche errore o qualche riga potrebbe crearmi problemi?

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Direi che va benissimo cosi!

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.