• User

    Controllo sequenziale di radio button con Javascript

    Salve a tutti amici / colleghi / fratelli / cugini / e quant'altro,
    ho un form con n bottoni radio:

    
    <FORM NAME="actions_find" ACTION="action_view.php" METHOD="POST" onSubmit="return check_form&#40;&#41;;">
    <INPUT TYPE="RADIO" NAME="action_id" VALUE="1">
    <INPUT TYPE="RADIO" NAME="action_id" VALUE="2">
    <INPUT TYPE="SUBMIT" VALUE="Visualizza">
    </FORM>
    
    

    su cui deve essere inviato il submit solo se almeno un bottone è selezionato. A tal proposito ho creato un semplicissimo controllo JS:

    
    <SCRIPT Language="Javascript" TYPE="text/javascript">
    <!--
    function check_form&#40;&#41; &#123;
    var count = 0;
    for &#40;i=0; i<=10; i++&#41; &#123; if &#40;document.actions_find.action_id&#91;i&#93;.checked == true&#41; &#123; count++; &#125; &#125;
    if &#40;count <= 0&#41; &#123; alert&#40;'Deve essere selezionata almeno un\'azione da visualizzare.'&#41;;
    return false; &#125; else &#123; return true; &#125;
    &#125;
    //-->
    </SCRIPT>
    
    

    che però non lavora perché non blocca il submit.
    Il JS debugger di Firefox dice:
    document.actions_find.action_id* has no properties.
    Ma come non ha proprietà? Ce l'ha eccome! (Certo, secondo me... Poi l'ultima parola la mette sempre il browser!)
    Qualcuno ha individuato già la svista?


  • Super User

    Non e' bene fare un ciclo for su elementi che non esistono. Tu hai due elementi e scorri su 11 > for (i=0; i<=10; i++)

    Prova questa alternativa:

    <script language="Javascript" type="text/javascript">
    <!--
    function check_form&#40;&#41; &#123;
    var controllo = false;
    var bottone = document.actions_find.action_id;
    for&#40;var i=0; i<bottone.length; i++&#41; &#123;
      if&#40;bottone&#91;i&#93;.checked&#41; &#123;
        controllo = true;
        break;
      &#125;
    &#125;
    if&#40;!controllo&#41; &#123;
      alert&#40;"Deve essere selezionata almeno un\'azione da visualizzare."&#41;;
      return false;
    &#125;
      return true;
    &#125;
    //-->
    </script> 
    
    

    Ciao :ciauz:


  • User

    Ciao Claudio.
    Non immagini quanto mi sei d'aiuto, la tua soluzione è ottima.
    Il fatto è che avevo 10 input radio, ma la matrice parte da zero e io ne prevedevo 11, solo per questo non funzionava.

    n ogni caso la tua soluzione è più elegante e flessibile perché tiene conto anche di possibili ampliamenti futuri, contando ogni volta la lunghezza della matrice degli elementi (= perfetto) e interrompendo il ciclo non appena trovato un radio selezionato (= risparmio di tempo se è tra i primi).

    Non sospettavo che Javascript controllasse anche la lunghezza di una matrice ed inibire l'esecuzione dell'intero codice. Pensavo che eventualmente avrebbe solo restituito "false" alla chiamata dell'ultimo elemento.

    Che dire? Ti auguro cose buone e soprattutto spero di poterti essere d'aiuto se ne sono in grado qualora ne avrai bisogno.
    Ciao


  • Super User

    Mi fa piacere che la mia soluzioni ti sia stata d'aiuto 🙂

    @emanueledg said:

    Ti auguro cose buone e soprattutto spero di poterti essere d'aiuto se ne sono in grado qualora ne avrai bisogno.

    Ho visto che anche tu hai aiutato altri prima di postare la tua richiesta.
    Grazie :ciauz:


    Ristorante [url=http://www.masseriatorricella.com/]Masseria Torricella e Parco Laurito a Francavilla.