IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Une fonction javascript dans un évènement onClick


Sujet :

JavaScript

  1. #1
    Membre éclairé

    Enseignant
    Inscrit en
    Juin 2004
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 55
    Par défaut Une fonction javascript dans un évènement onClick
    Bonjour,
    je ne suis pas un spécialiste de javascript. J'aimerai inclure un script complet dans un évènement onClick (sans faire référence à une balise <script> dans l'en-tête de ma page. Cela ne marche pas. Quelqu'un a-t-il une idée à me proposer. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
    <head>
      <title>Test javascript</title>
      <meta content="moi" name="GENERATOR">
    </head>
     
    <body>
      <form name="formtest" method="post" enctype="text/plain" id="formtest">
     
      <input type="text" name="NB1" size="10" value="5" maxlength="10" id="NB1" 
     
     
     
    onClick="
    function(){
    //initialisation des variables
    var mini = document.getElementById('NB1').value ;
    var maxi = document.getElementById('NB2').value ;
     
    	//conditions nécessaires
    	if(maxi=="0"){
             document.getElementById('NB3').value="?" ;
            }else if (maxi==""){
             document.getElementById('NB3').value="?";
            }else if (mini==""){
    		document.getElementById('NB3').value="?";
    	}else{
           //calcul des limites
    	     var N1=Math.floor(maxi/3);
    		 var N2=N1*2;
    		 var N4=maxi;
    		 var N3=Math.floor((N2+N4)/2);
     
    		 //affichage de l'évaluation
    		 if (mini<=N1){
    	  document.getElementById('NB3').value="NA" ;
    		 }else if (mini<=N2){
    	   document.getElementById('NB3').value="ECA" ;
    		 }else if (mini<=N3){
    	   document.getElementById('NB3').value="A" ;
    		 }else if (mini<=N4){
    	   document.getElementById('NB3').value="A+" ;
    		 }else if (mini>N4){
    	   document.getElementById('NB3').value="" ;
    		 }
    }
    }}
    ">
     
      </form>
    </body>
    </html>
    Je tiens à préciser qu'en fait cette page sera générée dynamiquement par PHP .

    Merci de votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Sans vouloir te vexer, quelle est l'utilité d'un tel système ? Ton HTML devient illisible, puisqu'il contient une énorme quantité de script là où il ne faut pas et pas de script là où il le faut.

    Une fois que j'aurai compris, je pourrai peut-être t'aider efficacement

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par dingoth
    Sans vouloir te vexer, quelle est l'utilité d'un tel système ? Ton HTML devient illisible, puisqu'il contient une énorme quantité de script là où il ne faut pas et pas de script là où il le faut.
    +1

    Tu peux toujours mettre ton script dans un fichier externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <html>
      <head>
      <title></title>
     
        <script type="text/javascript" src="MonFichier.js"></script>
     
      </head>
     
      <body>
     
     
      </body>
     
    </html>
    et écrits ton code dans MonFichier.js.

    Ton erreur est au niveau de guillemets : à l'intérieur de la fonction remplace les " par des '.

  4. #4
    Membre Expert
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Billets dans le blog
    1
    Par défaut
    Yop!

    Je pense que Lomig veut nous dire qu'il remplacera les points d'interrogation par des variables PHP, et donc qu'il préfère garder le code javascript dans le même fichier, ce qui exclut la solution du fichier js.

    Donc, et si j'ai bien capté, le mieux serait d'écrire une fonction javascript dans le HEAD, et d'y faire appel dans l'événement onClick.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
    <head>
    <title>Test javascript</title>
    <meta content="moi" name="GENERATOR">
    <script language="javascript">
    mafonction()
    {
    //initialisation des variables
    var mini = document.getElementById('NB1').value ;
    var maxi = document.getElementById('NB2').value ;
    //conditions nécessaires
    if(maxi=="0")
      { 
      document.getElementById('NB3').value="<? variable PHP ?>" ;
      }
    else if (maxi=="")
      {
       document.getElementById('NB3').value="<? autre variable PHP ?>";
      }
    else if (mini=="")
      {
      document.getElementById('NB3').value="<? encore une variable PHP ?>";
      }
    else
      {
      //calcul des limites
      var N1=Math.floor(maxi/3);
      var N2=N1*2;
      var N4=maxi;
      var N3=Math.floor((N2+N4)/2);
      //affichage de l'évaluation
      if (mini<=N1)
        {
        document.getElementById('NB3').value="NA" ;
        }
      else if (mini<=N2)
        {
        document.getElementById('NB3').value="ECA" ;
        }
      else if (mini<=N3)
        {
        document.getElementById('NB3').value="A" ;
        }
      else if (mini<=N4)
        {
        document.getElementById('NB3').value="A+" ;
        }
      else if (mini>N4)
        {
        document.getElementById('NB3').value="" ;
        }
      }
    }
    </script>
    </head>
     
    <body>
      <form name="formtest" method="post" enctype="text/plain" id="formtest">
       <input type="text" name="NB1" size="10" value="5" maxlength="10" id="NB1" onClick="mafonction()">
     
      </form>
    </body>
    </html>
    Au passage, j'ai enlevé une } du code javascript car il me semblait qu'il y en avait une de trop.

  5. #5
    Membre éclairé

    Enseignant
    Inscrit en
    Juin 2004
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 55
    Par défaut
    Merci pour vos réponses.

    A l'origine j'avais opté pour cette solution qui rendait le code plus lisible.

    Le problème est que php va me générer plusieurs lignes de 3 input (le premier input: nombre, le deuxième input: nombre et le troisième résultat - donné par l'événement onClick renvoyant à la fonction).

    Ce qui fait planter la fonction car elle n'accepte comme variables que 3 id de 3 input.

    Je pensais contourner le problème en générant une fonction différente pour chaque série de 3 input. Mais là mon petit cerveau bloque ...

  6. #6
    Membre éclairé

    Enseignant
    Inscrit en
    Juin 2004
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 55
    Par défaut
    J'ai finalement opté pour ce codage javascript (le code source proposé est généré par php à partir d'une base mysql). Je le propose si cela peut aider quelqu'un. J'ai utilisé "this.form" pour transmettre les variables des inputs au script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <html>
    <head>
    <title>Ma page</title>
    <script type="text/javascript" language="javascript">
    <!--
    function evaluer(nForm)
    {
    var mini = nForm.mini.value*1 ;
    var maxi = nForm.maxi.value*1 ;
     
        //conditions nécessaires
    	if(maxi=="0"){
    	nForm.eval.value ="?";
    	}else if (maxi==""){
    		nForm.eval.value ="?";
    	}else if (mini==""){
    		nForm.eval.value ="?";
    	}else{
           //calcul des limites
    	     var N1=Math.floor(maxi/3);
    		 var N2=N1*2;
    		 var N4=maxi;
    		 var N3=Math.floor((N2+N4)/2);
     
    		 //affichage de l'évaluation
    		 if (mini<=N1){
     
    	   nForm.eval.value ="NA" ;
    		 }else if (mini<=N2){
    	   nForm.eval.value ="ECA" ;
    		 }else if (mini<=N3){
    	   nForm.eval.value ="A" ;
    		 }else if (mini<=N4){
    	   nForm.eval.value ="A+" ;
    		 }else if (mini>N4){
    	   nForm.eval.value ="" ;
    		 }
    }
    }//fin du script
    -->
    </script>
    </head>
    <body>
     
          &Eacute;l&egrave;ve
          <input name='eleve' type='text' id='eleve' value='Benjamin'>
          Score
          <form name="form11" id="form11" action="" method="POST">
          <input name="mini" type="text" class="red2" id="mini"  value="" size="3" maxlength="3">
           sur
          <input name="maxi" type="text" class="red2" id="maxi" value="16" size="3" maxlength="3">
    	  &Eacute;valuation
          <input name="eval" type="text" class="red2" id="eval" value="" size="3" maxlength="3" onClick="evaluer(this.form)">
            </form>
    	<br>
     
          &Eacute;l&egrave;ve
          <input name='eleve' type='text' id='eleve' value='Camille'>
          Score
          <form name="form11" id="form11" action="" method="POST">
          <input name="mini" type="text" class="red2" id="mini"  value="" size="3" maxlength="3">
           sur
          <input name="maxi" type="text" class="red2" id="maxi" value="16" size="3" maxlength="3">
    	  &Eacute;valuation
          <input name="eval" type="text" class="red2" id="eval" value="" size="3" maxlength="3" onClick="evaluer(this.form)">
            </form>
    	<br>
     
        </tr>
     
     
      </table>
     
    </form>
      </body>
    </html>
    Désolé pour l'indentation.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 109
    Par défaut
    Citation Envoyé par ryan
    Je pense que Lomig veut nous dire qu'il remplacera les points d'interrogation par des variables PHP, et donc qu'il préfère garder le code javascript dans le même fichier, ce qui exclut la solution du fichier js.
    header('Content-Type: application/javascript;') pour générer un fichier javascript en php, je crois. Le fichier js externe est bien possible

Discussions similaires

  1. [PHP-JS] appeler une fonction javascript dans un lien
    Par kawther dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2007, 10h43
  2. [DOM] lancer une fonction javascript dans un lien HTML
    Par cortex007 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/11/2006, 21h11
  3. passer une fonction javascript dans un bouton
    Par zthibaut dans le forum Flash
    Réponses: 3
    Dernier message: 06/11/2006, 12h37
  4. Réponses: 2
    Dernier message: 03/04/2006, 18h38
  5. Réponses: 3
    Dernier message: 21/02/2006, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo