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

    Problema con JS all'onclick di radiobutton

    Salve a tutti, sono nuovo qui .

    Nonostante la mia totale inesperienza riguardo ai Javascript mi trovo a scrivere una funzione che (a me) pare piuttosto complessa e che dovrebbe fare questo:
    prendere il value del radiobutton selezionato (la funzione viene chiamata all'onclick dei radiobutton), controllare se uno dei valori che viene passato tramite URL corrisponde ad una delle 4 stringhe che ottengo "scomponendo" il value ed abilitare/disabilitare alcuni pulsanti del form.
    La pagina utilizza anche codice ASP.

    Il problema è che ottengo un errore ("richiesto oggetto") al quale non so porre rimedio.

    Il codice è questo:
    codice:
    <script language="JavaScript"> 
    
    function LTrim(str)
       {
     re=/^\s+/g;
     str.replace(re,"");
     return str;
       }
    
    function valida() 
    {
     var Orario
     var Oper1Sel
     var Oper2Sel
     var Oper3Sel
     var OperLog
     var appoIndice
     var appoStringa
     var IndiceElemento
     var i
     var sI
    
     OperLog = '<%=Oper%>';
     
     window.alert(OperLog);
    
     For (i=1; i<9; i++) 
     {
      sI = string(i)
        If (document.Pause.getElementById(sI).checked)
      {
       IndiceElemento = i;
      }
      End If
     } 
    
     Orario = document.Pause.getElementById(string(IndiceElemento)).value.substr(0, 5);
     appoIndice = document.Pause.getElementById(string(IndiceElemento.value.indexOf('@');
     appoStringa = document.Pause.getElementById(string(IndiceElemento.value.substr (appoindice + 1, document.Pause.getElementById(string(IndiceElemento.value.length - 6));
     appoIndice = appoStringa.indexOf('@');
     Oper1Sel = appoStringa.substr(0, appoIndice);
     appoStringa =  appoStringa.substr(appoindice + 1, appoStringa.length - appoindice - 1);
     appoIndice = appoStringa.indexOf('@');
     Oper2Sel = appoStringa.substr(0, appoIndice);
     appoStringa =  appoStringa.substr(appoindice + 1, appoStringa.length - appoindice - 1);
     Oper3Sel = appoStringa;
    
     If (OperLog == Oper1Sel) || (OperLog == Oper2Sel) || (OperLog == Oper3Sel)
     {
      document.Pause.Annulla.InnerHTML = "<input type='submit' name ='Annulla' value=' Annulla prenotazione 
    
    '>";
      document.Pause.Prenota.InnerHTML = "<input type='submit' name ='Prenota' value=' Prenota pausa ' 
    
    DISABLED>';
     }
     Else
     {
      If (LTrim(Oper1Sel) == '') || (LTrim(Oper2Sel) == '') || (LTrim(Oper3Sel) == '')
      {
      document.Pause.Annulla.InnerHTML = "<input type='submit' name ='Annulla' value=' Annulla prenotazione 
    
    ' DISABLED>";
      document.Pause.Prenota.InnerHTML = "<input type='submit' name ='Prenota' value=' Prenota pausa ' >';
      }
      Else
      {
      document.Pause.Annulla.InnerHTML = "<input type='submit' name ='Annulla' value=' Annulla prenotazione 
    
    ' DISABLED>";
      document.Pause.Prenota.InnerHTML = "<input type='submit' name ='Prenota' value=' Prenota pausa '  
    
    DISABLED>';
      }
      End If
     }
     End IF
    
    
    } 
    </script>
    Tra l'altro nelle ultime prove, nonostante non abbia effettuato modifiche al codice, i radiobutton mi rimangono checked anche se ne clicco un altro...

    Se serve questo è il codice del form (ASP escluso, prendo solo il codice che mi restituisce il web server):

    codice:
    <form action="PauseOK.asp" name="Pause" method="post">
    <table>
    
    <tr>
    <td>
    <font color=ffffff>
    17:30
    </font>
    <input type="radio" name="Ora1" value="17:30@ @ @ " ID="1" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    17:45
    </font>
    <input type="radio" name="Ora2" value="17:45@ @ @ " ID="2" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    18:00
    </font>
    <input type="radio" name="Ora3" value="18:00@ @ @ " ID="3" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    18:15
    </font>
    <input type="radio" name="Ora4" value="18:15@ @ @ " ID="4" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    18:30
    </font>
    <input type="radio" name="Ora5" value="18:30@ @ @ " ID="5" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    18:45
    </font>
    <input type="radio" name="Ora6" value="18:45@ @ @ " ID="6" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    19:00
    </font>
    <input type="radio" name="Ora7" value="19:00@ @ @ " ID="7" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    <font color=ffffff>
    19:15
    </font>
    <input type="radio" name="Ora8" value="19:15@ @ @ " ID="8" onClick="valida()"> 
    
    
    <td nowrap><font color=ffffff>
    
    </font></td>
    </tr>
    
    <tr>
    <td>
    </td>
    <td>
    <input type="submit" name ="Prenota" value=" Prenota pausa " DISABLED>
    </td>
    <td>
    <input type="submit" name ="Annulla" value=" Annulla prenotazione " DISABLED> 
    </td>
    <td>
    <INPUT TYPE="button" VALUE=" Torna indietro " onClick="history.back()">
    </td>
    </tr>
    </table>
    </form>
    Dopo gli "@" (che uso come separatori) dovrebbero esserci i nomi degli Operatori che la parte ASP estrae da DB.

    Cosa c'è che non va?


    Grazie in anticipo a chiunque voglia provare a darmi una mano.

    Ciao!

    P.S.: aggiungo anche questa richiestuccia... qui dove lavoro mi stanno quasi imponendo di realizzare queste pagine, ma non ho alcuno strumento che possa darmi una mano... in sintesi lavoro su notepad...
    Potete consigliarmi un piccolo ambiente di sviluppo (o magari un più semplice editor) dove poter scrivere codice ASP, HTML e Javascriopt un po' più facilmente (di debug non se ne parla, purtroppo)? Se possibile scaricabile gratuitamente (ma se non ne esistono free mi adeguo).

    Grazie ancora.

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao Xion Aritel e benvenuto nel forum

    è un po' un casino....
    i radiobutton devono avere tutti lo stesso nome se vuoi che sia possibile selezionarne uno solo.
    per le if in javascript va tutto in minuscolo
    la sintassi corretta è
    codice:
    if(condizione){
      ...
    }
    else{
      ...
    }
    per separare i valori nel value vai meglio se fai uno split sulla @
    la funzione valida() dovresti farla con un parametro e poi richiamarla con il value del radio. (onclick="valida(this.value);")
    per cambiare il disabled nei pulsanti puoi agire direttamente sulla proprietà disabled invece che usare l'innerHTML
    codice:
    document.Pause.Prenota.disable=true
    per editor gratuiti non saprei io uso interdev della microsoft (ce ne sono sicuramente)
    per il debug lato client ti basta il browser.

  3. #3
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    anche la funzione LTrim non era corretta
    ho dato una sisematina
    codice:
    function LTrim(str)
       {
     re=/^\s+/g;
     return str.replace(re,"");
       }
    
    function valida(valori) 
    {
     var Orario
     var Oper1Sel
     var Oper2Sel
     var Oper3Sel
     var OperLog
     var arr
     arr = valori.split('@');
     OperLog = '<%=Oper%>';
     
     window.alert(OperLog);
    
     Orario = arr[0];
     Oper1Sel = arr[1];
     Oper2Sel = arr[2];
     Oper3Sel = arr[3];
     if((OperLog == Oper1Sel) || (OperLog == Oper2Sel) || (OperLog == Oper3Sel))
     {
      document.Pause.Annulla.disabled=false;
      document.Pause.Prenota.disabled=true;
     }
     else
     {
      if((LTrim(Oper1Sel) == '') || (LTrim(Oper2Sel) == '') || (LTrim(Oper3Sel) == ''))
      {
      document.Pause.Annulla.disabled=true
      document.Pause.Prenota.disabled=false;
      }
      else
      {
      document.Pause.Annulla.disabled=true;
      document.Pause.Prenota.disabled=true;
      }
     }
    }
    ricordati di usare lo stesso nome per tutti i radio e di richiamare la funzione così
    codice:
    onclick="valida(this.value);"

  4. #4
    Ciao!

    Allora, anzitutto grazie per avermi voluto dare una mano.

    Grazie mille per il consiglio sul passare il valore alla funzione, mi risparmia un'infinità di caos nel controllo del value del radiobutton selezionato (vedi cosa significa conoscere il JavaScript? Mi metterei anche a studiarlo, ma qui non me ne stanno dando il tempo ).

    E grazie anche per la risistemata al codice.

    Adesso lo provo in pagina e vi faccio sapere.

    EDIT:
    Ho provato e funziona, grazie infinite!!!
    Per capire bene come funzionano le modifiche che hai apportato (in particolare lo split, che non conosco) vado a leggermi qualche guida sui JS appena ne ho il tempo (o meglio... le scarico da qui e me le leggo con calma a casa, che non ho connessione...).

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    lo split non fa altro che restituirti un array dove gli elementi sono le porzioni di stringhe separate dal carattere con il quale splitti
    quindi se fai così
    codice:
    stringa = 'primo@secondo@terzo';
    arr = stringa.split('@');
    è come se facessi
    codice:
    arr = new Array();
    arr[0] = 'primo';
    arr[1] = 'secondo';
    arr[2] = 'terzo';
    ciao e alla prossima

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.