begin process at 2012 05 29 07:01:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

CSS

 > 

Général

 > 

Controles sur des <select>


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Controles sur des <select>

dimanche 2 mai 2010 à 15:00:41 | Controles sur des <select>

harmonyk

Bonjour !
Je suis confronté à un problème avec une fonction Javascript, je ne sais pas comment la tourner...

J'ai un formulaire, avec 36 selects (oui je sais ^^) organisés par lots de 4 (donc 9 lignes de 4 selects).
Pour chaque select il y a 4 options (1,2,3,4) pour "évaluer" la préférence du select en cours.

J'ai une fonction qui permet de passer à la ligne suivante après le clic sur un bouton.
Mon but serait ici de vérifier que la ligne concernée comporte 4 valeurs différentes (donc de 1 à 4).
J'arrive très bien à coder un script qui permet de le faire pour la 1ère ligne par exemple, mais il m'en reste 8, et donc ca serait très répétitif de recoder la même chose 9 fois...

Voici mon script pour vérifier la 1ere ligne (m1 m2 m3 et m4 correspondent aux selects):
Code Javascript :

function controlerTest(form) 
{       
    var ligne = (form.m1.value)*(form.m2.value)*(form.m3.value)*(form.m4.value);
    if (ligne!=24)
    {
        alert (ligne+" à la place de 24");
        form.m1.focus();
        return false;
    }         
}



Je pense (et j'ai énormément cherché) qu'il faudrait que je fasse ce controle dans la fonction qui permet de passer à la ligne suivante, voir ci-dessous :


Code Javascript :
function suivante(id)
{
    var ligne = 'ligne'+id;
    var suivante = 'ligne'+(id+1);
    var trligne = 'trligne'+id;
    var trsuivant = 'trligne'+(id+1); 
       
    document.getElementById(ligne).style.display='none';
    document.getElementById(trligne).style.display='none';
    if (suivante!="ligne10")
        document.getElementById(suivante).style.display='block';
    else
    {
        document.getElementById("submitTest").style.display='block';
        document.getElementById("testForm").innerHTML="Test terminé, vous pouvez maintenant calculer vos résultats";
    }
    document.getElementById(trsuivant).style.display='block';
}



En sachant que m1 m2 m3 et m4 correspondent aux colonnes et (id) à la ligne, comment coder tout ca ensemble?
Tel est ma question :)
dimanche 2 mai 2010 à 15:49:26 | Re : Controles sur des <select>

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Fait une fonction qui prend en paramètre tes 4 select :
function controlerTest(m1, m2, m3, m4)
{
var ligne = (m1.value)*(m2.value)*(m3.value)*(m4.value);
if (ligne!=24)
{
alert (ligne+" à la place de 24");
m1.focus();
return false;
}
}
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
dimanche 2 mai 2010 à 15:59:35 | Re : Controles sur des <select>

harmonyk

Merci de ta réponse =)
Alors je pense pas que ce soit possible de les passer ainsi en paramètre.
Bon c'est de ma faute je n'ai pas posté le script php/html correspondant :

Code PHP :
<!-- ...début formulaire ... -->
<table>
<?php
    $idMot=1;
    for ($ligne=1; $ligne<10; $ligne++)
    {
        if ($ligne==1)
        {
            echo '<tr id="trligne'.$ligne.'" style="display:block;">'."\n".'<td><input type="button" name="suivant" id="ligneSuivante" value="Ligne suivante" onclick="suivante('.$ligne.');" /></td>'."\n".'</tr>'."\n";
            echo '<tr id="ligne'.$ligne.'" style="display:block;">'."\n".'<td>'.$ligne.' ->&nbsp;&nbsp;</td>'."\n".'';
        }
        else
        {
            echo '<tr id="trligne'.$ligne.'" style="display:none;">'."\n".'<td><input type="button" name="suivant" id="ligneSuivante" value="Ligne suivante" onclick="suivante('.$ligne.');" /></td>'."\n".'</tr>'."\n";
            echo '<tr id="ligne'.$ligne.'" style="display:none;">'."\n".'<td>'.$ligne.' ->&nbsp;&nbsp;</td>'."\n".'';            
        }
        for ($colonne=1; $colonne<5; $colonne++)
        {              
            echo '<td><select name="mot['.$idMot.']" id="m'.$idMot.'">'."\n".'';
            $idMot++;
            for ($i=1; $i<5; $i++)
            {
                echo '<option value="'.$i.'">'.$i.'</option>'."\n".'';
            }
            echo '</select>&nbsp;'."\n".'';        
            afficheMot($ligne, $colonne);
            echo '</td>'."\n".'';           
        }
        echo "</tr>\n";             
    }        
?>
</table>
<!-- ...fin du formulaire avec le submit etc ... -->


Donc comment récupérer l'idMot alors que quand j'appelle la fonction, je ne suis pas encore dans la boucle qui affiche les colonnes ?
dimanche 2 mai 2010 à 16:19:34 | Re : Controles sur des <select>

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Récupère tes select par des GetElementById (remplice tes idMot par la valeur de ta variable php:
Code Javascript :
controlerTest(document.getElementById('m'+$idMot1), document.getElementById('m'+$idMot2), document.getElementById('m'+$idMot3), document.getElementById('m'+$idMot4));

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
dimanche 2 mai 2010 à 16:37:27 | Re : Controles sur des <select>

harmonyk

Oui ok, mais c'est justement mon soucis, il y a 36 $idmot xD

J'ai codé en une seule fonction qui verifie le produit des id des 4 mots présents sur la ligne affichée, et si true j'affiche la ligne d'après:

Code Javascript :
function suivante(id)
{
    if (id==1)
    {
        mot1= document.getElementById("m1").value;
        mot2= document.getElementById("m2").value;
        mot3= document.getElementById("m3").value;
        mot4= document.getElementById("m4").value;
        
        var ligne = mot1*mot2*mot3*mot4;
        if (ligne!=24)
        {
            alert (ligne+" à la place de 24");
            mot1.focus();
            return false;
        }        
    }
    
    var ligne = 'ligne'+id;
    var suivante = 'ligne'+(id+1);
    var trligne = 'trligne'+id;
    var trsuivant = 'trligne'+(id+1);
      
    document.getElementById(ligne).style.display='none';
    document.getElementById(trligne).style.display='none';
    if (suivante!="ligne10")
    {
        document.getElementById(suivante).style.display='block';
        document.getElementById(trsuivant).style.display='block';
    }
    else
    {
        document.getElementById("submitTest").style.display='block';
        document.getElementById("testForm").innerHTML="Test terminé, vous pouvez maintenant calculer vos résultats";
    }
    
}


Dur dur la boucle a trouver, si vraiment il faut en faire une
dimanche 2 mai 2010 à 16:58:18 | Re : Controles sur des <select>

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Tu te prends vraiment la tête pour rien : le principe est de faire une fonction qui teste si les 4 selects que tu lui passe sont corrects :

Code Javascript :
function controlerTest(m1, m2, m3, m4) 
{ 
var ligne = (document.getElementById(m1).value)*(document.getElementById(m2).value)*(document.getElementById(m3).value)*(document.getElementById(m4).value); 
if (ligne!=24) 
{ 
alert (ligne+" à la place de 24"); 
document.getElementById(m1).focus(); 
return false; 
} 
} 


et tu l'appelle avec chaque ligne :
Code Javascript :
var ok = false;
for (var i = 0; i < 10; i++) {
  if (!controlerTest('m' + (i * 4 + 1), 'm' + (i * 4 + 2), 'm' + (i * 4 + 3), 'm' + (i * 4 + 4))) {
    ok=false;
    break;
  }
}
if (ok) {
  // faire le traitement si les lignes sont ok
}



______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
dimanche 2 mai 2010 à 18:41:55 | Re : Controles sur des <select>

harmonyk

Effectivement c'est déjà plus propre, on sent l'expérience =)
La fonction fonctionne bien si var ligne!=24
Par contre je n'arrive pas à passer ok à true, et pourtant var ligne est égal à 24.
Je poste la fonction au complet au cas ou :
Code Javascript :
function controlerTest(m1, m2, m3, m4) 
{ 
    var ligne = (document.getElementById(m1).value)*(document.getElementById(m2).value)*(document.getElementById(m3).value)*(document.getElementById(m4).value); 
    if (ligne!=24) 
    { 
        alert (ligne+" à la place de 24"); 
        document.getElementById(m1).focus(); 
        return false; 
    }
} 

function suivante(id)
{
    var ok = false;
    for (var i = 0; i < 10; i++) 
    {
        if (!controlerTest('m' + (i * 4 + 1), 'm' + (i * 4 + 2), 'm' + (i * 4 + 3), 'm' + (i * 4 + 4))) 
        {
            ok=false;
            break;
        }
    }
    if (ok) 
    {
        alert('ok');
        var ligne = 'ligne'+id;
        var suivante = 'ligne'+(id+1);
        var trligne = 'trligne'+id;
        var trsuivant = 'trligne'+(id+1);
          
        document.getElementById(ligne).style.display='none';
        document.getElementById(trligne).style.display='none';
        if (suivante!="ligne10")
        {
            document.getElementById(suivante).style.display='block';
            document.getElementById(trsuivant).style.display='block';
        }
        else
        {
            document.getElementById("submitTest").style.display='block';
            document.getElementById("testForm").innerHTML="Test terminé, vous pouvez maintenant calculer vos résultats";
        }
    }
    else alert('oups');  
}
dimanche 2 mai 2010 à 18:58:02 | Re : Controles sur des <select>

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Ah, petite bourde dans mon code : faut initialiser ok à true et non à false bien sûr :
Code Javascript :
var ok = true;
for (...)

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
dimanche 2 mai 2010 à 19:21:34 | Re : Controles sur des <select>

harmonyk

Oui j'ai testé mais non toujours false
dimanche 2 mai 2010 à 19:29:11 | Re : Controles sur des <select>

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Si tu as modifié l'initialisation de la variable, et que tes combo ont les bonnes valeurs, y'a pas de raisons qu'il reste à true.

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

1 2 3

Cette discussion est classée dans : ligne, form, id, document, suivante


Répondre à ce message

Sujets en rapport avec ce message

envoi d'un form [ par laurent98 ] comment changerla propriete "action" d'un formje fais :function accept() { document.form.action.value="./valid2.php?a=accept"; document.form.submit(); Y a un problême. [ par sschupp ] Date function verif() { res = false res2 = true if (this.form.annee1 > this.form.annee2) return res; if (window.document.f Mozilla et position d'un <div> [ par philagui ] Bonjour,Voila j'utilise le script suivant pour positionner et afficher quelque chose sur une page:function show(calque, id) { document.getElementById( cellules d'un tableau qui changent de couleur [ par hella71 ] Merci Vous trouverez ci apres le scripttout va bien sur iexplorer mais sur netscape ca marche pas Merciiiiiiiiiii pour votre aide.function cha Modification d'un script. [ par jje ] J'ai telecharge un script sur le site qui permet de faire des menus deroulants interactifs. il est dispo ici http://javascriptfr.com/code.aspx?ID=1614 Recuperation d'un POST d'un popup vers une frame de la fenetre ki a ouvert le popup [ par Petiout2 ] bonjour,j'aimerai recuperer un post d'un popup, et renvoyé ces informations vers la fenetre mere ki a appelé le popupj'ai essayé ca : function verif Redirection [ par massacr ] Bonjour, je voudrais faire un compte à rebours avec un bouton démarrer et un autre arreter.Le bouton démarrer marche bien mais lorsque que l'on clique className la ligne de code mystère [ par sapakus ] Bonjour, Au tout début d'un fichier .js trés trés long réalisé par un chevronné professionnel de la programmation web, j'ai trouvé cette ligne de comm appendChild [ par bultez ] buldans le script suivantappendChild ajoute bien la "ligne 2"mais font et br .. pas pris en compte : s'affichent comme du texteje fais quelle erreur ? Sauver un fichier en javascript avec des longues lignes [ par rkampf ] Je veux sauver le texte d'une page dans un fichier que l'utilisateur choisit.Lors de l'affichage à l'écran tout va bien, le fichier s'enregistre, mail


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales