deux evenements onChange sur un select


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

deux evenements onChange sur un select

Message le Mer Oct 22, 2008 10:30

Bonjour je souhaite attribuer un evenement onChange en fonction du choix d'un select .

par exemple j'ai deux options dans mon select :

Code: Tout sélectionner
<select id="ramass" onchange="document.getElementById('$numero$mois$annee').style.display = (this.options[this.selectedIndex].value=='versement'? 'block':'none');">
  <option value=""></option>
  <option value="versement">Versement</option>
  <option value="pasramasse">Pas de ramassage</option>
</select>


Pour la selection de
Code: Tout sélectionner
<option value="versement">Versement</option>
l'evenemment fonctionne correctement .

maintenant pour la selection
Code: Tout sélectionner
<option value="pasramasse">Pas de ramassage</option>
je souhaite que si cette option est selectionnée cela m'affiche une boite de dialogue confimation.


Merci de votre aide


BadProcESs
WRInaute accro
WRInaute accro
 
Messages: 2657
Inscription: 28 Juil 2003

Message le Mer Oct 22, 2008 10:34

Pas besoin de faire 2 onchange, contrôle simplement dans ta méthode si c'est cette entrée qui est sélectionnée, alors tru affiche un message, et ensuite tu continu le process normal...


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mer Oct 22, 2008 10:35

Suffit d'appeller une fonction (car tout mettre dans un OnChange beurk) et selon l'ID de ta sélection faire l'action demandée.

Je vois pas trop la difficulté...


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Message le Mer Oct 22, 2008 10:37

il te suffit de faire une fonction :

Code: Tout sélectionner
<script language="javascript">

function evenOnChange(){

if(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value=="versement"){
       document.getElementById('$numero$mois$annee').style.display = (this.options[this.selectedIndex].value=='versement'? 'block':'none');
}
else{
      afficheboitdedialogue();
}
}



ET tu peux l'appeler comme ça :
<select id="ramass" onchange="evenOnChange()">
Dernière édition par blman le Mer Oct 22, 2008 10:38, édité 1 fois.


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

Message le Mer Oct 22, 2008 10:38

je vais tenter de faire ça mais pour repondre à ta question, la dificulté est que moi et le javascript nous ne sommes pas très copains.


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mer Oct 22, 2008 10:39

OK, quelques tutoriaux de bases en javascript ou plus généralement en programmation te ferait gagner beaucoup de temps je pense ;)


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

Message le Mer Oct 22, 2008 12:09

help,

j'ai testé ta méthode blman mais sans succès il ne se passe rien lors de la selection d'une option, j'ai tenté de bidouiller mais rien y fait.

si vous pouvez m'aiguiller vers la bonne syntaxe ça serait super sympas.

Merci encore


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Message le Mer Oct 22, 2008 13:04

C'est sûr oui, la méthode est bonne, après il y a des ajustements à faire :
- déjà voir ça : $numero$mois$annee qu'est-ce que c'est ? du PHP ?
- Ensuite vérifie les id
- La fonction afficheboitdedialogue(); n'existe pas, hein, c'était pour l'exemple

Mais si tu ne connais pas javascript, tu va avoir du mal à adapter le code à ton cas.


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

Message le Mer Oct 22, 2008 13:30

blman je suis effectivement une bille en javascript mais je comprends néanmoins ton code et j'ai bien vérifié les id de mes champs de texte et select mais rien y fait, aucun événemment sur aucune des selections je poste le code de ma page si tu veux bien y jetter un oeil.

Code: Tout sélectionner
<script language="javascript">

function versement(){

if(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value=="versement"){
       document.getElementById('test').style.display = (this.options[this.selectedIndex].value=='versement'? 'block':'none');
}
}
</script>
<form name="selection" action="" id="selection">
<table>
<th scope='col' bordercolor='#ffffff'></th><th scope='col' bordercolor='#ffffff'></th></tr>
<tr align='left'>
  <th scope='row' bordercolor='#ffffff'>&nbsp;</th>
  <td bordercolor='#ffffff'>&nbsp;</td>
  <td bgcolor=#FF9999>&nbsp;</td>
  <td bgcolor=#FF9999>&nbsp;</td>
  <td bgcolor=#FF9999>&nbsp;</td>
</tr>
<tr align='left'><th scope='row' bordercolor='#ffffff'>$jour</th><td bordercolor='#ffffff'>$nbjour</td>
<td bgcolor=#FF9999><input type='text' name='test'  id ='test' size='10' style="display:none;"></td>
<td bgcolor=#FF9999><input type='text' name='test2' size=10></td>
<td bgcolor=#FF9999><input type='text' name='test3' size=10></td>
<td>
<select id="ramass" onchange="versement();">
  <option value=""></option>
  <option value="versement">Versement</option>
  <option value="pasramass">Pas de ramassage</option>
</select>
</td>
</tr>
</table>
</form>


meme la fonction de départ d'affichage du chmps de text portant l'id 'test' ne s'effectue pas

merci de ton aide en tous cas.


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Message le Mer Oct 22, 2008 13:48

tu met this.options dans ta fonction. Le this est surement indéfini ici.

Utilise plutôt document.getElementById('ramass') à la place.


Sinon passe en mode débuggage et place des alertes un peu partout dans le code alert("pouic"); pour voir où ça merde.
Utilise tu la web developper bar sous firefox ? Elle te donne pas mal d'infos sur les erreurs en javascript.


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

Message le Mer Oct 22, 2008 15:25

merci beaucoup blman ça fonctionne très bien,

en revanche si je selectionne 'versement' alors le champs de texte 'test' apparait mais si je reselectionne 'pasramass' le champs 'test' reste visible.

As tu une idée?


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Message le Mer Oct 22, 2008 15:47

document.getElementById('test').style.display = 'block'; -> affiche le block test

document.getElementById('test').style.display = 'none'; -> cache le block test

Donc si versement n'est pas sélectionné dans la liste, tu le cache.


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

Message le Jeu Oct 23, 2008 12:25

je rencontre un autre probleme, je vais poster tout mon code mais j'explique dabord mon probleme :

si je selectionne le deuxieme select alors la fonction ne fonctionne pas.
la fonction ne fonctionne que si le premier select est selectionné .

voici mon code :

Code: Tout sélectionner
<?

//Inclusion du ficher de connexion a la BDD
include ('connexion.php');

//Requette pour recuperer le total crédité du mois selectionné.
$sumcredit="SELECT SUM( `versement` ) FROM `ramassage_data` WHERE magasin = '$magasin' AND `id` LIKE '%$mois$annee%' AND `validation` = 'oui' ";
$req = mysql_query($sumcredit) or die('Erreur SQL !'.$sumcredit.'<br>'.mysql_error());
list($credit) = mysql_fetch_row($req);
$totalcredit = $credit;

//Requette pour recuperer le total non crédité du mois selectionné.
$sumnoncredit="SELECT SUM( `versement` ) FROM `ramassage_data` WHERE magasin = '$magasin' AND `id` LIKE '%$mois$annee%' AND `validation` != 'oui' ";
$req2 = mysql_query($sumnoncredit) or die('Erreur SQL !'.$sumnoncredit.'<br>'.mysql_error());
list($noncredit) = mysql_fetch_row($req2);
$totalnoncredit = $noncredit;

//Mise en forme du tableau
echo "<form action='validation.php' method='post' name='ramassage' id='ramassage'><table border='1' bordercolor='#00000' cellspacing='2' cellpadding='2'>\n";
echo "<tr>\n";
echo "<tr align='left'>
  <th scope='row' bordercolor='#ffffff'></th>
  <td bordercolor='#ffffff'></td>
  <td bgcolor=#FFFFFF align='center'><strong>Versement</strong></td>
  <td bgcolor=#FFFFFF align='center'><strong>Selection</strong></td>
  <td bgcolor=#FFFFFF align='center'><strong>Cmd Monnaie</strong></td>
  <td bgcolor=#FFFFFF align='center'><strong>Rbt Monnaie</strong></td>
</tr>";
$date = date ('t', mktime(0, 0, 0, $mois, 1, date("$annee") ));
$nbjour='0';
$numjour='1';
$numero='0';
while ($nbjour < $date) {
$jour = date("D", mktime(0, 0, 0, $mois, $numjour, date("$annee") ));
$numero++;
$numjour++;
$nbjour++;

//Requete de récupération des données en fonction de la date et du magasin
$sql="SELECT * FROM ramassage_data WHERE id = '$numero$mois$annee' AND magasin= '$magasin'";
$req3 = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$versement='';
$cmonnaie='';
$rbtmonnaie='';
while ($cl = mysql_fetch_array ($req3)){
$versement=$cl['versement'];
$cmonnaie=$cl['cmdmonnaie'];
$rbtmonnaie=$cl['rbtmonnaie'];
}

//changement des jours us en fr
if ($jour=='Mon'){$jour='Lundi';}
if ($jour=='Tue'){$jour='Mardi';}
if ($jour=='Wed'){$jour='Mercredi';}
if ($jour=='Thu'){$jour='Jeudi';}
if ($jour=='Fri'){$jour='Vendredi';}
if ($jour=='Sat'){$jour='Samedi';}
if ($jour=='Sun'){$jour='Dimanche';}

//fonction javascript pour les differents choix du select
echo "<script language=\"javascript\">\n";
echo "function versement$numero(){" ;
echo "if(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value==\"versement\"){
document.getElementById('$numero$mois$annee').style.display =(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value==\"versement\"? 'block':'none');}\n";
echo "else if(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value==\"pasramass\"){ if(confirm('Etes vous sur que le versement n\'a pas eu lieu'))document.location.href='pasramass.php?id=$numero$mois$annee&magasin=$magasin';} } \n";
echo "</script>\n";


//affichage des cellules correspondantes aux jours de ramassage en jaune
$jour_ramassage1='';
$jour_ramassage2='';
$bg="SELECT ramassage1, ramassage2 FROM ramassage WHERE magasin ='$magasin'";
$reqbg = mysql_query ($bg) or die ('Erreur SQL !'.$bg.'<br>'.mysql_error());
while ($cl = mysql_fetch_array ($reqbg)){
$jour_ramassage1=$cl['ramassage1'];
$jour_ramassage2=$cl['ramassage2'];}
$bgcolor='white';
if ($jour_ramassage1==$jour or $jour_ramassage2==$jour){$bgcolor='yellow';}

//Suite et fin de l'affichage du tableau
echo "<th scope='col' bordercolor='#ffffff'></th><th scope='col' bordercolor='#ffffff'></th></tr>";
echo "<tr align='left'><th scope='row' bordercolor='#ffffff' bgcolor=$bgcolor>$jour</th><td bordercolor='#ffffff' bgcolor=$bgcolor>$nbjour</td>";
echo "<td bgcolor='#FF9999' valign='bottom' align='center'><input type='text' name=$numero$mois$annee id=$numero$mois$annee size=10 value='$versement' style='display:none;'></td>";
echo "<td bgcolor='#FF9999' align='center'><select id='ramass' onchange=\"return versement$numero();\" >
  <option value='' selected='selected'></option>
  <option value='versement'>Versement</option>
  <option value='pasramass'>Pas de ramassage</option>
</select></td>";
echo "<td bgcolor='#FF9999' align='center'><input type='text' name='cmonnaie$numero$mois$annee' size='10' value='$cmonnaie'></td>";
echo "<td bgcolor='#FF9999' align='center'><input type='text' name='rmonnaie$numero$mois$annee' size='10' value='$rbtmonnaie'></td>";
}
echo "<tr align='left'><th scope='row' bordercolor='#ffffff'></th><td bordercolor='#ffffff'>Total crédité</td>\n";
echo "<td bgcolor=#00FF33><input type='text' name='totalcredit' size=10 readonly='readonly' value='$totalcredit'></td></tr>\n";
echo "<tr><th scope='row' bordercolor='#ffffff'></th><td bordercolor='#ffffff'>Total non crédité</td>\n";
echo "<td bgcolor=#FF9999><input type='text' name='totalnon' size=10 readonly='readonly' value='$totalnoncredit'></td>\n";
echo "<td>Solde commande Monnaie</td>\n";
echo "<td><input type='text' name='soldecmonnaie' size=10 readonly='readonly' value=''></td>\n";
echo "</tr>\n";
echo "</table></form>\n";
?>


Merci de votre aide.


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Jeu Oct 23, 2008 12:57

Ton code est illissible >_<

A quoi ça sert de se compliquer la vie avec ce genre de code PHP?
Code: Tout sélectionner
echo "<script language=\"javascript\">\n";
echo "function versement$numero(){" ;
echo "if(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value==\"versement\"){
document.getElementById('$numero$mois$annee').style.display =(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value==\"versement\"? 'block':'none');}\n";
echo "else if(document.getElementById('ramass').options[document.getElementById('ramass').selectedIndex].value==\"pasramass\"){ if(confirm('Etes vous sur que le versement n\'a pas eu lieu'))document.location.href='pasramass.php?id=$numero$mois$annee&magasin=$magasin';} } \n";
echo "</script>\n";


Alors qu'en enlevant les echo et en sortant de ton code PHP tu pourrais avoir un code lisible, qui t'évites les antiquotes, ...

Exemple
Code: Tout sélectionner
?>
<script language="javascript">
function versement(){
...
<?php


Ca t'évite plein de bug.

Ensuite deuxisème soucis : a quoi ça sert de faire des fonction si t'en fait une par select?? (si j'ai compris ton code).
Le but d'une fonction c'est de factoriser des choses que tu dois faire plusieurs fois.

Donc renouveau rappel : passe 4H à lire les bases du javascript / programmation. T'aurais déjà fini ton script au lieu d'avancer à l'aveuglette.

Ensuite en utilisant des choses comme firebug tu pourra facilement débugger tes scripts javascript.


webac
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 373
Inscription: 4 Mar 2005

Message le Jeu Oct 23, 2008 13:02

Je pense effectivement que ça s'impose mais je suis obligé de travailler dans l'urgence.
cependant je vais suivre tes conseil et me plonger dans des tutos et de la doc


merci encore.

deux evenements onChange sur un select

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité