onChange sans effet

onChange sans effet - HTML/CSS - Programmation

Marsh Posté le 16-07-2006 à 01:15:35    

Bonsoir,
dans mon site web, j'ai un champ qui peut etre rempli automatiquement (selon les saises dans les autres champs), mais qui peut aussi etre modifié si l'utilisateur le veut.
Mais à chaque fois que le champ change de valeur,  je fais "onChange=alert('valeur changé')".
Quand je modifie la valeur à la main, ça marche, mais quand le champ se remplit automatiquement, ça ne fait rien.
 
Quelqu'un peut me dire pourquoi?
 
 

Reply

Marsh Posté le 16-07-2006 à 01:15:35   

Reply

Marsh Posté le 16-07-2006 à 01:24:37    

parce que tout simplement les évènements sont gérés en fonction de l'action utilisateur
pour palier à ce problème tu peux faire simplement :  
 
monelement.value=nouvellevaleur;
monelement.onchange();
 
sinon evite de faire des alert() c'est plutôt chiant pour l'utilisateur

Reply

Marsh Posté le 16-07-2006 à 01:29:02    

tu veux dire que je dois plutot faire:
monelement.onChange() quand je fais le changement automatique?  
 
et sinon, pour l'alert, j'ai pas le choix, je dois le faire ici car je ne suis qu'un pauvre développeur qui suit les caprices d'un client :)
merci

Reply

Marsh Posté le 16-07-2006 à 01:34:04    

dès que tu fais un changement de valeur,
 tu dois aussi appeler la méthode onchange de cet élément.
 
et puis c'est onchange() pas onChange()

Reply

Marsh Posté le 16-07-2006 à 01:41:11    

Ca depend, y en a qui prefèrent onChange, surtout les habitués de java

Reply

Marsh Posté le 16-07-2006 à 01:46:40    

en html voire en xhtml désormais tout est en minuscule (éléments et attributs)
ensuite le JS étant case sensitive, tu n'arrivera pas à atteindre le onchange via la méthode montruc.onChange() mais bien via montruc.onchange();


Message édité par gatsu35 le 16-07-2006 à 01:47:01
Reply

Marsh Posté le 16-07-2006 à 01:50:24    

je te laisse faire le test toi même
 

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title></title>
  5. <script>
  6. window.onload=function() {
  7.  var sel = document.getElementById("montruc" );
  8.  sel.onchange();
  9. }
  10. </script>
  11. </head>
  12. <body>
  13. <select id="montruc" onchange="alert('toto');">
  14. <option>toto1</option>
  15. <option>toto2</option>
  16. <option>toto3</option>
  17. </select>
  18. </body>
  19. </html>

Reply

Marsh Posté le 16-07-2006 à 01:53:24    

ça ne marche toujours pas et je ne comprends pas.
Bon voilà le champ qui peut se remplir auto:
 
<input type="text" id="calendar4" name="calendar4" onchange="controle_date();"/>
 
 
et voilà la fontion appelé "controle_date" que tu vois:
 
 
function controle_date()
    {
     if(document.getElementById('localisation').value == 'AD VITAM' & document.getElementById('calendar4').value!='')
     {
      if (!date1_sup_date2(document.getElementById('calendar4').value,document.getElementById('date_saisie').value))  
      {
       alert ("Attention, la date d'alerte est inf\351rieure \340 la date du jour!" );
      }  
     }  
    }
 
 
 
avec:
 
function date1_sup_date2(date1,date2)
    {
     temp1 = date1.split("/" );
     temp2 = date2.split("/" );
     return (temp1[2]>temp2[2] || (temp1[2]==temp2[2] & temp1[1]>temp2[1]) || (temp1[2]==temp2[2] & temp1[1]==temp2[1] & temp1[0]>temp2[0]) );
    }
 
 
 
la fonctio qui sert a remplir automatiquement le champ:
 
 
function verifier_date_alerte()
    {
     
     if (document.getElementById('type_doc').value=="Contrat" & document.getElementById('calendar1').value!="" & document.getElementById('preavis_val').value!="" )
     {
      document.getElementById('calendar4').value=addition_date(document.getElementById('calendar1').value,-2-document.getElementById('preavis_val').value);
      document.getElementById('calendar4').onchange();
      document.getElementById('calendar4').readOnly=true;
     }  
     else  
     {
      document.getElementById('calendar4').value='';
      document.getElementById('calendar4').readOnly=false;
     }      
    }

Reply

Marsh Posté le 16-07-2006 à 01:55:07    

bon c'est peut etre pas une bonne idée à 2h du mat, mais au cas ou tu vois la gaffe dis le moi :)

Reply

Marsh Posté le 16-07-2006 à 01:59:43    

Sans savoir ce qu'il en retourne derrière je peux pas trop te dire.
 
Mais ya pleins de trucs bancales dans ton code.
 
pourquoi n'utilises tu pas l'objet date pour comparer 2 dates ?  
c'est quand même largement plus simple.
 
Ensuite utilise plutôt des références car 36 getElementById c'est fuper mais illisible

Reply

Marsh Posté le 16-07-2006 à 01:59:43   

Reply

Marsh Posté le 16-07-2006 à 02:07:25    

references? je connais pas.
et j'unistilise pas l'objet date car en JS il n'y a pas de fonctions qui permets de comparere des dates. Donc j'ai du en construire une. A priori elle marche. Bon merci quand meme, mais je pense que je vais devoir me casser la tete tout seul :)

Reply

Marsh Posté le 16-07-2006 à 02:16:50    

ouais super ya pas de fonction pour comparer les dates ? oui c'est vrai.
Mais une simple conditiion sur deux dates suffit !
 
madate.getTime()<madate2.getTime()
là je compare mes deux date

Reply

Marsh Posté le 16-07-2006 à 02:19:11    

justement, je suis en train de modifier ma fonction de compariason de date pour utiliser des getTime(). On sait jamais, ca pourrait marcher après. Mais sinon, c'est quoi que tu appelles référence?

Reply

Marsh Posté le 16-07-2006 à 02:25:23    

ça marche enfin. Merci Gatsu!

Reply

Marsh Posté le 16-07-2006 à 02:27:49    

mbarekh a écrit :

justement, je suis en train de modifier ma fonction de compariason de date pour utiliser des getTime(). On sait jamais, ca pourrait marcher après. Mais sinon, c'est quoi que tu appelles référence?


 

Code :
  1. var truc = document.getElementById("monelementavecid" )


 
maintenant truc est une référence à mon élément en HTML
et je peux donc accéder à toutes ses propriétés
truc.innerHT;ML
truc.onclick();
truc.onchange();

Reply

Marsh Posté le 16-07-2006 à 02:29:38    

ah d'accord. c'est vrai, j'aurai du y penser, c'est moins couteux.
allez, merci pour tout et bonne nuit (rnfin ce qu'il en reste :))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed