Verification selection minimale, parmis tableau de checkbox, en Javascript [Résolu]

Signaler
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour à tous, je demande votre aide après "googlelisation" de mon problème, et pas de réponse adéquate...merci d'avance de votre attention et vos réponses.

Dans un formulaire classique je dois proposer un tableau de sélection de plage de disponibilité.
J'aimerais , si possible, vérifier en javascript si au moins une des plages à été sélectionnée.

Voici l'aspect général :
Quand êtes-vous disponible ? * :

                            
                            Lundi,
Mardi,
Mercredi,
Jeudi,
Vendredi,
Samedi,
Dimanche,

----

Matin,
,
,
,
,
,
,
,

----

Après-midi,
,
,
,
,
,
,



Et la vérification que j'ai à dispo :
function VerifRecrutement(form)
{
with(form)
{
var valid = true;
if(valid) if((!TestChampVide(lundi_matin, "Vous devez saisir au moins une plage de disponibilité!"))||(!TestChampVide(mardi_matin, "Vous devez saisir au moins une plage de disponibilité!"))|| ETC...) valid = false;

Mais ceci ne fonctionne pas... MERCi d'avance pour vos pistes...

14 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
dans la méthode que je t'ai donné il conviendra, bien évidement, de supprimer les alertes au sein des fonctions de test...

;O)
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
5
Bien le bonjour, si j'ai bien compris il faut vérifier qu'au moins une check est cochée:
ça donnerais un truc du genre:


<html>
<head>
<script>
function checkDispo(){
var _table = document.getElementById("dispo_recrutement");
var _check = _table.getElementsByTagName("input");
// boolean qui va indiquer qu'une check au moins est cochée.
var _ischeck = false;
for ( var i = 0; i<_check.length; i++){
// d'abord on s'assure que ce soit une check box
if ( _check[i].type =="checkbox"){
if ( _check[i].checked){
_ischeck= true;
break;
}
}
}
if (!_ischeck){
alert("merci de selectionner une ligne au moins");
}else{
alert ("vous avez coché au moins une case");
}
}
</script>
</head>

Quand êtes-vous disponible ? * :


Lundi,
Mardi,
Mercredi,
Jeudi,
Vendredi,
Samedi,
Dimanche,

----

Matin,
,
,
,
,
,
,
,

----

Après-midi,
,
,
,
,
,
,



</html>


Non ?


[o-_-o]
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011

C'est génial, merci cela fonctionne parfaitement !!!

Juste pour terminer, comment positionner ce script dans le script de vérification des autres champs pour qu'il soit utilisé à la suite des autres ? (car j'utilise déjà le onclick="VerifForm()")

Voici le script général des autres champs :
function VerifRecrutement(form)
{
with(form)
{
var valid = true;
if(valid) if(!TestChampVide(nom, "Vous devez saisir votre nom !")) valid = false;
if(valid) if(!TestChampVide(prenom, "Vous devez saisir votre prénom !")) valid = false;
if(valid) if(!TestChampVide(naissance, "Vous devez saisir votre date de naissance !")) valid = false;
if(valid) if(!TestChampVide(adresse, "Vous devez saisir votre adresse !")) valid = false;
if(valid) if(!TestChampVide(cp, "Vous devez saisir votre code postal !")) valid = false;
if(valid) if(!TestCP(cp)) valid = false;
if(valid) if(!TestChampVide(ville, "Vous devez saisir votre ville !")) valid = false;
if(valid) if(!TestChampVide(telfixe, "Vous devez saisir votre numéro de téléphone !")) valid = false;
if(valid) if(!VerifTel(telfixe)) valid = false;
if(valid) if(!TestChampVide(telmob, "Vous devez saisir votre numéro de téléphone portable!")) valid = false;
if(valid) if(!VerifMobile(telmob)) valid = false;
if(valid) if(!TestChampVide(mail, "Vous devez saisir votre e-mail !")) valid = false;
if(valid) if(!TestEmail(mail)) valid = false;
if(valid) if(!TestChampVide(naissance, "Vous devez saisir votre date de naissance (jj/mm/aaaa) !")) valid = false;

if(valid) if(!TestChampVide(station, "Veuillez saisir au moins une ligne dans le champs Station près de chez vous !")) valid = false;
if(valid) if(!TestChampVide(experience, "Veuillez saisir au moins une ligne dans le champs Experience !")) valid = false;
if(valid) if(!TestChampVide(nb_heures, "Vous devez saisir un nombre d'heures d'intervention par semaine!")) valid = false;

return valid;	
}
}


J'ai testé de placer ta fonction avant le "return valid", mais celui-ci se déclenche dès qu'un autre champ est vide, et non en dernière position. Placé après, il ne fonctionne pas.
Mais déjà un GRAND MERCI ! Vive Codes-sources !
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
5
alors, la , je pense que ça devrait passer comme ça:

function checkDispo(){
var _table = document.getElementById("dispo_recrutement");
var _check = _table.getElementsByTagName("input");
// boolean qui va indiquer qu'une check au moins est cochée.
var _ischeck = false;
for ( var i = 0; i<_check.length; i++){
// d'abord on s'assure que ce soit une check box
if ( _check[i].type =="checkbox"){
if ( _check[i].checked){
_ischeck= true;
break;
}
}
}
if ( !_isCheck){
alert ("vous devez renseigner une dispo calendaire");
}
return _isCheck;
}
function VerifRecrutement(form)
{
with(form)
{
var valid = true;
if(valid) if(!TestChampVide(nom, "Vous devez saisir votre nom !")) valid = false;
if(valid) if(!TestChampVide(prenom, "Vous devez saisir votre prénom !")) valid = false;
if(valid) if(!TestChampVide(naissance, "Vous devez saisir votre date de naissance !")) valid = false;
if(valid) if(!TestChampVide(adresse, "Vous devez saisir votre adresse !")) valid = false;
if(valid) if(!TestChampVide(cp, "Vous devez saisir votre code postal !")) valid = false;
if(valid) if(!TestCP(cp)) valid = false;
if(valid) if(!TestChampVide(ville, "Vous devez saisir votre ville !")) valid = false;
if(valid) if(!TestChampVide(telfixe, "Vous devez saisir votre numéro de téléphone !")) valid = false;
if(valid) if(!VerifTel(telfixe)) valid = false;
if(valid) if(!TestChampVide(telmob, "Vous devez saisir votre numéro de téléphone portable!")) valid = false;
if(valid) if(!VerifMobile(telmob)) valid = false;
if(valid) if(!TestChampVide(mail, "Vous devez saisir votre e-mail !")) valid = false;
if(valid) if(!TestEmail(mail)) valid = false;
if(valid) if(!TestChampVide(naissance, "Vous devez saisir votre date de naissance (jj/mm/aaaa) !")) valid = false;

if(valid) if(!TestChampVide(station, "Veuillez saisir au moins une ligne dans le champs Station près de chez vous !")) valid = false;
if(valid) if(!TestChampVide(experience, "Veuillez saisir au moins une ligne dans le champs Experience !")) valid = false;
if(valid) if(!TestChampVide(nb_heures, "Vous devez saisir un nombre d'heures d'intervention par semaine!")) valid = false;
valid = valid & checkDispo();
return valid;	
}
}



Mais je n'ai pas tester.
je ne suis pas sur de valid = valid & checkDispo();
je ne sais pas s'il faut doubler le "&".

a tester dirais-je !


[o-_-o]
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011

merci beaucoup pour ta proposition mais çà ne fonctionne pas.
Enfin si presque !:
après validation
-il détecte le premier champ vide, affiche le message d'alerte;
-tout de suite après, affiche l'alerte des checkbox vide;
-valide le formulaire, envoi du mail.
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011

pardon oublié : même résultat en doublant le "&"
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
5
Ha ha, alors il est possible d'essayer cela:


function checkDispo(){
var _table = document.getElementById("dispo_recrutement");
var _check = _table.getElementsByTagName("input");
for ( var i = 0; i<_check.length; i++){
// d'abord on s'assure que ce soit une check box
if ( _check[i].type =="checkbox"){
if ( _check[i].checked){
 retrun true;
}
}
}
return false;
}
function VerifRecrutement(form)
{
with(form)
{
var valid = true;
if(valid) if(!TestChampVide(nom, "Vous devez saisir votre nom !")) valid = false;
if(valid) if(!TestChampVide(prenom, "Vous devez saisir votre prénom !")) valid = false;
if(valid) if(!TestChampVide(naissance, "Vous devez saisir votre date de naissance !")) valid = false;
if(valid) if(!TestChampVide(adresse, "Vous devez saisir votre adresse !")) valid = false;
if(valid) if(!TestChampVide(cp, "Vous devez saisir votre code postal !")) valid = false;
if(valid) if(!TestCP(cp)) valid = false;
if(valid) if(!TestChampVide(ville, "Vous devez saisir votre ville !")) valid = false;
if(valid) if(!TestChampVide(telfixe, "Vous devez saisir votre numéro de téléphone !")) valid = false;
if(valid) if(!VerifTel(telfixe)) valid = false;
if(valid) if(!TestChampVide(telmob, "Vous devez saisir votre numéro de téléphone portable!")) valid = false;
if(valid) if(!VerifMobile(telmob)) valid = false;
if(valid) if(!TestChampVide(mail, "Vous devez saisir votre e-mail !")) valid = false;
if(valid) if(!TestEmail(mail)) valid = false;
if(valid) if(!TestChampVide(naissance, "Vous devez saisir votre date de naissance (jj/mm/aaaa) !")) valid = false;

if(valid) if(!TestChampVide(station, "Veuillez saisir au moins une ligne dans le champs Station près de chez vous !")) valid = false;
if(valid) if(!TestChampVide(experience, "Veuillez saisir au moins une ligne dans le champs Experience !")) valid = false;
if(valid) if(!TestChampVide(nb_heures, "Vous devez saisir un nombre d'heures d'intervention par semaine!")) valid = false;
if (!checkDispo()){ alert("merci de préciser une plage de dispo"); valid=false;}		
return valid;	
}
}


La, ça devrait marché un peut mieux (enfin, l'espoir fait vivre et je suis parti pour vivre super vieux ;o))

[o-_-o]
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011

Heuu.. là çà réagit plus du tout. L'envoi part sans vérification.
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
5
serait-il possible d'avoir toute la page html ?
parce que le temps que je mette en place tous les champs et les méthodes de tests...
Merci


[o-_-o]
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011

Voici toute la page avec le formulaire





STRUCTURE











Civilité * :
Mr
Mme
Mlle




Nom * :



Prénom * :




Date de naissance * :
(jj/mm/aaaa)





Adresse * :




Code postal * :




Ville * :




Tél fixe * :




Tél mobile * :




Email * :




Situation familiale * :

Célibataire
Marié(e)
Divorcé(e)
Veuf(ve)
Pacsé(é)




Avez-vous des enfants ?*
Oui
Non




Si oui, indiquez leur age :




Travaillez-vous actuellement ?*
Oui
Non




Possedez-vous une voiture ?*
Oui
Non




Station RER/METRO/BUS la plus proche de chez vous * :




Temps d'expérience total : * :




Autre expériences professionnelles :




Nombre d'heure disponible par semaine * :







Quand êtes-vous disponible ? * :

Lundi,
Mardi,
Mercredi,
Jeudi,
Vendredi,
Samedi,
Dimanche,

----

Matin,
,
,
,
,
,
,
,

----

Après-midi,
,
,
,
,
,
,








* Champ obligatoire











Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
Bonjour à tous,
une façon plus light de faire tes vérif
function VerifRecrutement(form) {
  var szErreur ="";  // message erreur final
  var szCr = "\n";   // si affichage dans un alerte
  var szCr = "
"; // si affichage dans une DIV
  with(form) {
    if( !TestChampVide(nom,""))
      szErreur += "Vous devez saisir votre nom !" +szCr;
    if( !TestChampVide(prenom,""))
      szErreur += "Vous devez saisir votre prénom !" +szCr;
    if( !TestChampVide(naissance,""))
      szErreur += "Vous devez saisir votre date de naissance !" +szCr;
    if( !TestChampVide(adresse,""))
      szErreur += "Vous devez saisir votre adresse !" +szCr;
    if( !TestChampVide(cp, ""))
      szErreur += "Vous devez saisir votre code postal !" +szCr;
    //-----------
    //-- ETC ...
    //-----------
    if( !checkDispo())
      szErreur += "merci de préciser une plage de dispo";
    //-- si la chaine n'est pas vide on l'affiche
    if( szErreur.length)
      alert( szErreur);
    //-- return false ou true
    return( szErreur.length ==0);
  }
}

PS:
- que cela ne t'empêches pas de faire les vérif coté serveur
- si tu affiche une alert à chaque mauvaise vérif, bonjour si l'internaute à cliquer sur le bouton submit par erreur
;O)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
au passage il y a une erreur de frappe dans la fonction checkDispo
if (_check[i].type == "checkbox") {
  if (_check[i].checked) {
    return true; /// ERREUR ICI return et non retrun
  }
}

;O)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
encore un point, elle est définie où ta fonction TestChampVide

;O)
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
11 février 2011

Ok merci PetoleTeam, je vais tester çà !
Le fonction TestChampVide est définie dans un autre fichier javascript qui contient toutes les verification du contenu des champs (si bon code postal, si bon nombre numéro tel, si bonne forme email, etc...)
J'attends le test de Zobibol pour fermer ce ticket.
Merci encore