Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Controllo di checkbox

  1. #1

    Controllo di checkbox

    Ciao a tutti,
    vorrei fare uno script che controlla una lista di checkbox e invia il modulo se e soltanto se almeno una di queste checkbox è stata spuntata dall'utente.

    Il modulo è creato da uno script php nel seguente modo:
    <FORM name="modulo" method="POST">
    <INPUT name="lista_categorie" type="checkbox" value="4">Telefonia

    <INPUT name="lista_categorie" type="checkbox" value="2">Informatica

    .....
    <INPUT type="submit" value="Conferma" onClick="Modulo()"><INPUT type="reset" value="Annulla">
    </FORM>

    Ora dovrei fare un Js con una funzione "function Modulo()" che esegue il controllo... con i campi text non è un problema ma qua come si fa?
    Intuisco che ci sarà un array ma non so come si maneggia in Js e soprattutto come funzionano gli indici.

    Saluti.

  2. #2
    e' un tema trattato numerose volte: se effettui una ricerca trovi tutto quello che ti serve.

    ciao

  3. #3
    Hai ragione.. scusa..

    Ora però ho un'altra domanda:

    ho trovato questa soluzione e funziona:
    function Modulo() {
    var array_check = document.modulo.elements;
    for (var i=0; i<array_check.length; i++) if (array_check[i].checked) return true;
    alert('Selezionare almeno un checkbox');
    return false;
    }

    Vedo che in Js per identificare il blocco dei checkbox mi basta utilizzare "elements".. ma come è possibile? E se avessi avuto due blocchi di checkbox logicamente distinti come avrei potuto identificarli?

    Già che ci siamo imparamio un po'...

  4. #4
    no, con document.nomeform.elements accedi a un array contenente tutti gli elementi del form.
    eventualmente, puoi controllare che l'i-esimo elemento sia un checkbox con questa sintassi:

    codice:
    document.nomeform.elements[i].type=="checkbox"
    ciao

  5. #5
    Ok, questo risolve una parte del problema, almeno sono sicuro di non fare controlli checked formalmente invalidi, ma se come ti dicevo prima ho una situazione di questo tipo:

    <FORM>
    <insieme 1 di checkbox>
    <insieme 2 di checkbox>
    </FORM>

    dove dell'insieme 1 devo controllare che almeno uno sia selezionato mentre sull'insieme 2 devo controllare che almeno due siano selezionati.

    Come faccio? Non mi basta dire che devono essere almeno in 2 quelli selezionati, altrimenti perdo delle condizioni.

    Ok, si sta facendo accademia, ma mi pare interessante...

    Secondo problema non troppo connesso con questo:
    come faccio nella pagina target scritta in php a ricevere 1 o più selezioni effettuate coi checkbox? In jsp è semplice, ma qui nn capisco, mi arriva solamente l'ultimo nella migliore delle ipotesi.
    Ho cercato e ho trovato una soluzione: chiamare i vari checkbox tutti così: "iosonouncheckbox[]"... ma nn ho capito ugualmente dall'altra parte come devo fare...

  6. #6
    Errore: sopra intendevo dire che nn mi basta controllare che almeno 3 siano selezionati.

  7. #7
    puoi fare in questa maniera:

    codice:
    function controllo(f){
     var e=f.elements;
     var c=0;
     for(var i=1;i<=5;i++)
      if(e['primogruppo'+i].checked) c++;
     if(c<3){
      alert("Selezionare almeno 3 checkbox nel primo gruppo.");
      return false;
     }
     c=0;
     for(var i=1;i<=3;i++)
      if(e['secondogruppo'+i].checked) c++;
     if(c<1){
      alert("Selezionare almeno 1 checkbox nel secondo gruppo.");
      return false;
     }
     return true;
    }
    questo supponendo che tu abbia due gruppi di checkbox, il primo composto da elementi di nome

    primogruppo1
    primogruppo2
    primogruppo3
    primogruppo4
    primogruppo5

    e il secondo contenente


    secondogruppo1
    secondogruppo2
    secondogruppo3

    e supponendo che, rispettivamente, siano necessari 3 e 1 checkbox selezionati.

    per il secondo quesito, se passi a PHP un elemento di nome 'nome[]', esso sara' disponibile direttamente come array.

    ciao

  8. #8
    Il secondo problema ora l'ho capito.

    Per il primo: è parecchio strano sto linguaggio... cioè intendere che questo "e['primogruppo[]'+i]" può riferirsi a una roba del genere "primogruppo1"...

    Cioè mi verrebbe al più da pensare che si possano fare coppie simili: "e['primogruppo[i]']" con "primogruppo[1]"

    o

    "e['primogruppo[]'+i]" con "primogruppo[]1"

    tutti abbastanza strambi.. ma più lineari..

  9. #9
    non ti resta che fare delle prove, ora le basi le hai.
    cosa ti sembra strano?
    semplicemente con la sintassi

    codice:
    document.nomeform.elements['quellochevuoi'+eventualeinteroincrementale]
    puoi indicizzare come vuoi gli elementi.

    semplicemente elementi distinti NON andrebbero indicati con lo stesso nome (tranne nel caso in cui si parli di elementi radiobutton dello stesso gruppo).

    ciao

  10. #10
    Utente di HTML.it L'avatar di renzoz
    Registrato dal
    May 2001
    Messaggi
    305
    Scusate ho un problema... ho una serie di controlli in una funzione e ci voglio mettere anche il controllo che segnali che almeno un campo text qta[] venga compilato;
    poi dovrei definire il totale dell'array qta[] all'inizio dello script perchè il numero dei campi dell'array è variabile...

    ho fatto cosi:

    codice:
      
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla_dati(){
    
    //-------------- controllo che sia settato almeno un campo
    	
     var e=document.richiesta.elements;
     var c=0;
     for(var i=1;i<=5;i++) //quel i<=5 dovrebbe essere i>totale_campi
      if(e['qta'+i] != "") c++;
     if(c<1){
      alert("Inserire la quantità richiesta almeno per un articolo.");
      return false;
      }
     // -----------------------------------------------------
    	var val_data=document.richiesta.data.value;
    	var val_nome=document.richiesta.nome.value;
    	var val_rs=document.richiesta.rs.value;
    	var val_ind=document.richiesta.ind.value;
    	var val_city=document.richiesta.city.value;
    	var val_cap=document.richiesta.cap.value;
    	var val_tel=document.richiesta.tel.value;
    	var val_email=document.richiesta.email.value;
    	if (val_data == "") 
    	{
    	alert('Attenzione non è stata specificata nessuna data di consegna.');
    	document.richiesta.data.focus();
    	return false;
    	}
    	else if (val_nome == "") 
    	{
    	alert('Attenzione inserire il nome e cognome.');
    	document.richiesta.nome.focus();
    	return false;
    	}
    	
    	else if (val_ind == "") 
    	{
    	alert('Attenzione manca il tuo indirizzo.');
    	document.richiesta.ind.focus();
    	return false;
    	}
    	else if (val_cap == "") 
    	{
    	alert('Attenzione manca il C.A.P.');
    	document.richiesta.cap.focus();
    	return false;
    	}
    	else if (val_city == "") 
    	{
    	alert('Attenzione manca la città.');
    	document.richiesta.city.focus();
    	return false;
    	}
    	else if (val_tel == "") 
    	{
    	alert('Attenzione manca il numero di telefono.');
    	document.richiesta.tel.focus();
    	return false;
    	}
    	// -------------------------------------
    	
       Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
       if (Filtro.test(val_email))
          return true;
       else
          {
          alert("L'indirizzo e-mail inserito non è valido, controllare prego");
          document.richiesta.email.focus();
          return false;
          }
    }
    //-->
    </script>
    il body:

    codice:
    <form action="https://www.miosito.it/invio.php" method="post" name="richiesta" onSubmit='return controlla_dati();'>
    <input type=\"text\" name=\"qta[]\" size=\"3\">
    <input type=\"text\" name=\"qta[]\" size=\"3\">
    <input type=\"text\" name=\"qta[]\" size=\"3\">
    <input type=\"text\" name=\"qta[]\" size=\"3\">
    ecc.

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.