deux evenements onChange sur un select

  • Auteur de la discussion Auteur de la discussion webac
  • Date de début Date de début
WRInaute occasionnel
Bonjour je souhaite attribuer un evenement onChange en fonction du choix d'un select .

par exemple j'ai deux options dans mon select :

Code:
<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:
<option value="versement">Versement</option>
l'evenemment fonctionne correctement .

maintenant pour la selection
Code:
<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
 
WRInaute passionné
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...
 
WRInaute passionné
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é...
 
WRInaute accro
il te suffit de faire une fonction :

Code:
<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()">
 
WRInaute occasionnel
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.
 
WRInaute passionné
OK, quelques tutoriaux de bases en javascript ou plus généralement en programmation te ferait gagner beaucoup de temps je pense ;)
 
WRInaute occasionnel
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
 
WRInaute accro
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.
 
WRInaute occasionnel
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:
<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.
 
WRInaute accro
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.
 
WRInaute occasionnel
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?
 
WRInaute accro
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.
 
WRInaute occasionnel
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:
<? 

//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.
 
WRInaute passionné
Ton code est illissible >_<

A quoi ça sert de se compliquer la vie avec ce genre de code PHP?
Code:
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:
?>
<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.
 
WRInaute occasionnel
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.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut