Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Selezione checkbox

  1. #1

    Selezione checkbox

    Ciao,
    ho una tabella che contiene delle checkbox (esattamente 39 checkbox) del tipo
    <input type="checkbox" name="s1" id="s[1]">
    <input type="checkbox" name="s2" id="s[2]">
    ....
    <input type="checkbox" name="s39" id="s[39]">

    Non riesco a realizzare uno script che permetta all'utente di selezionare max 3 checkbox e che oscuri (disabilita) tutte le altre opzioni nel momento in cui l'utente ne ha selezionato 3.
    Quindi quello che vorrei fare è dare all'utente una lista di 39 checkbox definite come sopra e che, nel momento in cui l'utente seleziona 3 risposte, le rimanenti checkbox vengano disabilitate e vengano riattivate solo nel momento in cui l'utente deselziona 1 o + opzioni che aveva precedentemente selezionato.
    Suggerimenti?

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Un semplice esempio

    codice:
    <script>
    var cbx;
    
    function selectionComplete() {
      var sel = 0;
      for (i=0; i<cbx.length; i++) {
         if (cbx[i].checked) sel++;
      }
    
       return (sel > 2);  
    }
    
    
    function disableOtherCB() {
      for (i=0; i<cbx.length; i++) {
         if (!(cbx[i].checked)) cbx[i].disabled = 'disabled';
      }
    }
    
    function enableAllCB() {
      for (i=0; i<cbx.length; i++) {
         if (cbx[i].disabled) cbx[i].removeAttribute('disabled');
      }
    }
    
    
    function setCbListener() {
      frm = document.getElementById('cbx');
      cbx = frm.getElementsByTagName('input');
    
      for (i=0; i<cbx.length; i++) {
         setCbOnclick(cbx[i]);
      }
    }
    
    function setCbOnclick(cb) {
      cb.onclick = function() {
         if (selectionComplete()) {
            disableOtherCB();
         }
         else {
            enableAllCB();
         }
    
      }
    }
    
    window.onload = setCbListener;
    </script>
    
    
    <form id="cbx">
      <input type="checkbox" name="s1" id="s[1]">
    
      <input type="checkbox" name="s2" id="s[2]">
    
      <input type="checkbox" name="s3" id="s[3]">
    
      <input type="checkbox" name="s4" id="s[4]">
    
      <input type="checkbox" name="s5" id="s[5]">
    </form>
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Grande. E' perfetto.
    Thanks.

  4. #4

    Errore script

    Si è verificato un errore dovuto ad una lacuna del codice.
    Infatti se uso il codice

    <form id="cbx">
    <input type="checkbox" name="s1" id="s[1]">

    <input type="checkbox" name="s2" id="s[2]">

    <input type="checkbox" name="s3" id="s[3]">

    <input type="checkbox" name="s4" id="s[4]">

    <input type="checkbox" name="s5" id="s[5]">
    <input type="submit" value="ok">
    </form>

    Infatti ( usando lo script di prima ) dopo che l'utente seleziona le 3 scelte si oscura anche il bottone OK ( tag input type="submit" ) che non mi permette di andare avanti.
    Come posso risolvere questo problema ?

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    devi ovviamente lasciare fuori dalla funzione tutto ciò che non sia checkbox quindi cambia questa funzione

    codice:
    function setCbListener() {
      frm = document.getElementById('cbx');
      cbx = frm.getElementsByTagName('input');
    
      for (i=0; i<cbx.length; i++) {
         setCbOnclick(cbx[i]);
      }
    }
    in questo modo

    codice:
    function setCbListener() {
      frm = document.getElementById('cbx');
      inp = frm.getElementsByTagName('input');
      for (i=0; i<inp.length; i++) {
         if (inp[i].type == 'checkbox') {
           cbx.push(inp[i]);
           setCbOnclick(inp[i]);
         }
      }
    }
    e nella prima riga al posto di

    var cbx

    scrivi

    var cbx = new Array();



    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    Ciao, probabilmente l'errore sta nella funzione setCbListener(), in quanto essa carica il vettore cbx con tutti i tag INPUT della form, il che è sbagliato in quanto anche il bottone è un tag INPUT, quindi bisogna fare in modo di caricare il vettore cbx dei soli tag INPUT di tipo CHECKBOX. Ti ho modificato la funzione, provala così e fammi sapere se ti sono stata d'aiuto. Speriamo bene. Ciao Ciao



    codice:
    function setCbListener() 
    {
      frm = document.getElementById('cbx');  
      cbx1 = frm.getElementsByTagName('input'); //ARRAY CONTENENTE TUTTI I TAG INPUT DELLA FORM
      x=0;
      for (k=0; k<cbx1.length;k++)
      { 
         if (cbx1[k].getAttribute("type")=="checkbox")
         {
             cbx[x]=cbx1[k]; //ARRAY CONTENENTE TUTTI I TAG INPUT CHECKBOX DELLA FORM
             x++;
         }
      }
      for (i=0; i<cbx.length; i++) {
         setCbOnclick(cbx[i]);
      }
    }

  7. #7
    La soluzione di fcaldera è PERFETTA.
    Ringrazio anche birbyna per il suo aiuto. (il codice che mi hai segnalato però non funziona correttamente)
    Grazie 1000.
    thanks

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.