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 :

Initialisation de variable


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut Initialisation de variable
    Bonjour � tous.

    Je code un formulaire qui contient plusieurs champs select.

    Ces select sont remplis par des valeurs stock�es dans la base de donn�e.

    J'utilise l'�venement onchange pour mettre la valeur choisie dans une variable javascript.

    Mais l'utilisateur n'est pas oblig� de changer la valeur de chaque select, parfois, la valeur par d�faut est la valeur qu'il souhaite s�lectionner.

    Il faut donc que je d�clare en haut de ma page la variable javascript, et que je lui donne la valeur par d�fault. J'�crase cette valeur par un "this.value" dans un onchange lorsque l'utilisateur change de valeur.

    Mon probl�me vient de l'initialisation de la variable. Le script marche uniquement si je change la valeur de TOUS les select...

    Pourtant, j'ai beau chercher, je ne vois pas ce qui cloche.

    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
    <SCRIPT language="Javascript">
    	 var <?php echo ($nomval);?> = <?php echo ($dflt);?>;
    </SCRIPT>
     
    <select  name='<?php echo$param; ?>' id='<?php echo ($nomval);?>' onchange="<?php echo ($nomval);?> = this.value;">
    	<?php                                                                                                   
                    $values = get_valeurs($id);
                                                                    
                            while ($donnees=mysql_fetch_assoc($values))
                            {
                                    $id_value = $donnees["id"];
                                    $value = $donnees["valeur"];
                                    
                                    echo "<option value='$id_value'>$value</option>";
                            }       
            ?>
    </select>
    Firebug me renvoie cela:
    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
    <SCRIPT language="Javascript">
    	 var val1 = 95;
    </SCRIPT>
     
     
    <select  name='param1' id='val1' onchange="val1 = this.value;">
    	<option value='95'>no</option><option value='94'>yes</option></select>			
    </p>
     
    <p>
    <SCRIPT language="Javascript">
    	 var val2 = 93;
    </SCRIPT>
     
     
    <select  name='param2' id='val2' onchange="val2 = this.value;">
    	<option value='93'>no</option><option value='92'>yes</option></select>			
    </p>
    <input type="submit" value="OK" onclick="var req ='id_valeur='+val1; req = req+' OR id_valeur='+val2; alert('req vaut:'+req); "/>
    La ligne "var val1 = 95;" est bien cens� d�clarer la variable val1, et lui donner la valeur 95, non?

    Pourtant, si je ne change pas la valeur de chaque select, rien ne se passe si j'appuis sur le bouton de validation, et firebug annonce "val1 is not defined" (ou val2, val3 etc en fonction des valeurs chang�es ou non par l'utilisateur)

    Si je change chaque valeur, l'alert affiche le resultat voulu.

    Si quelqu'un voit d'ou vient mon probleme, je lui en serais tr�s reconnaissant.

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    D�tails du profil
    Informations personnelles :
    �ge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par d�faut
    Salut et bienvenue sur les forums de developpez.com

    J'ai repris ton code et je ne rencontre pas de souci particulier.
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
      <meta http-equiv="content-type" content="text/html; charset=windows-1250">
      <meta name="generator" content="PSPad editor, www.pspad.com">
      <title></title>
      </head>
      <body>
    <SCRIPT language="Javascript">
    	 var val1 = 95;
    </SCRIPT>
     
     
    <select  name='param1' id='val1' onchange="val1 = this.value;">
    	<option value='95'>no</option><option value='94'>yes</option></select>			
    </p>
     
    <p>
    <SCRIPT language="Javascript">
    	 var val2 = 93;
    </SCRIPT>
     
     
    <select  name='param2' id='val2' onchange="val2 = this.value;">
    	<option value='93'>no</option><option value='92'>yes</option></select>			
    </p>
    <input type="submit" value="OK" onclick="var req ='id_valeur='+val1; req = req+' OR id_valeur='+val2; alert('req vaut:'+req); "/>
     
      </body>
    </html>
    Donc soit les infos ne sont pas compl�tes, soit tu as un autre souci.

    ERE

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    Mes variables javascript sont initialis�es dans un while, et le bouton avec le onclick qui ne reconnait pas les variables est dans un if un peu plus bas dans la page. Le probl�me peut il venir de la?

    Pour �tre plus clair, je te copie le code de fa�on un peu plus compl�te:

    J'ai une page testparam.php qui comprend:

    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
    $i=0;
    			while ($row_param=mysql_fetch_assoc($rq))
    			{ 
    				$rqt = get_type_release($rel);
    				$rslt=mysql_fetch_assoc($rqt);
    				$typerel=$rslt['S4'];
    				$typeparam=$row_param['S4'];
     
    				if( $typeparam==0 ) //On vérifie que le paramètre peut être affiché. 
    				{	
    					?> 
    					<p>
    					<?php                                   
                                            $i++;
                                            $param='param'.$i;
                                            $nomval='val'.$i;
                                            $id = $row_param['id'];
                                            $retval=get_valeurs_lim1($id);
                                            $ret=mysql_fetch_assoc($retval);
                                            $dflt=$ret['id'];
                                    
                                                    include("vues/select_param.php");
                                            ?>			
    					</p>
    					<?php
                                    }                               
                            }
                            
                            if($i==0) //Si aucun paramètre ne peut être affiché
                            {
                                    // Le problème ne vient pas de la, je vous épargne le code
                            }       
            
                            else
                            {
                                     $rel=$_GET['rel']; $board=$_GET['board'];?>
    				<input type="submit" value="<?php echo$valid;?>" onclick="var req ='id_valeur='+val1;
    				<?php
                                            for($m=2;$m<=$i;$m++)
                                            {
                                                    $value='val'.$m;
                                            ?>		
    						req = req+' OR id_valeur='+<?php echo$value;?>;
    					<?php   
                                            }
                                            ?>;
    					alert('req vaut:'+req); 
    					loadparamind(req, '<?php echo$rel;?>', '<?php echo$board;?>');"/>
    					<?php
    			}
    cette page (testparam) appelle select_param.php par un include.
    (select_param.php affiche les selects avec les onchange)

    select_param.php:
    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
    <SCRIPT language="Javascript">
    	var <?php echo ($nomval);?> = <?php echo ($dflt);?>;
    </SCRIPT>
     
     
    <?php
    echo "<label class=\"visu\">$row_param[parametre] :</label>";
    ?>
     
    <select  name='<?php echo$param; ?>' id='<?php echo ($nomval);?>' onchange="<?php echo ($nomval);?> = this.value;">
    	<?php                                                                                                   
                    $values = get_valeurs($id);
                                                                    
                            while ($donnees=mysql_fetch_assoc($values))
                            {
                                    $id_value = $donnees["id"];
                                    $value = $donnees["valeur"];
                                    
                                    echo "<option value='$id_value'>$value</option>";
                            }       
            ?>
    </select>
    C'est tout de m�me assez �tonnant que le code fonctionne chez toi, et qu'il bloque chez moi.

    En tout cas je te remercie de t'interesser � mon probl�me.

  4. #4
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    D�tails du profil
    Informations personnelles :
    �ge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par d�faut
    Salut,

    Peux tu passer le code HTML finalement r�ellement envoy� au client ? Ce sera plus simple pour y voir clair.

    ERE

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    Voici le code html :

    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
    77
    78
    79
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <title>managment tool</title>
    <meta content="text/html; charset=iso-8859-15" http-equiv="Content-Type"/>
    <link href="/styles/style.css" title="Design" type="text/css" media="screen" rel="stylesheet">
    <link rel="icon" type="image/png" href="images/icone.png" /> 
    <script type="text/javascript" src="includes/jquery.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
    <script type="text/javascript" src="includes/functions.js" charset="iso_8859-1"></script>
     
    </head>
    <body>
    <div id="haut">
    <span class="right">
    </span>
    </div>
    <div id="corps">
    <div id="menu">
    </div>
    <div id="contenu">
    <div id="partleft">
    <h3>Select:</h3>
    <label class="visu" for="typerelease">A product type:</label>
    <select id="typerelease" onchange="getReleases(this.value);" name="typerelease">
    <option value="vide">- - Choose a product type - -</option>
    <option value="type1">type 1</option>
    <option value="type2">type 2</option>
    </select>
    <br/>
    <span id="blocReleases">
    <label class="visu" for="release">A release:</label>
    <select id="release" onchange="getFamily(this.value);" name="release">
    </select>
    <br/>
    </span>
    <span id="blocFamily">
    <label class="visu" for="family">A board family:</label>
    <select id="family" onchange="getBoards(this.value, '2');" name="family">
    <option value="vide">- - - Choose a family - - -</option>
    <option value="aaa">aaa</option>
    <option value="bbb">bbb</option>
    <option value="ccc">ccc</option>
    <option value="ddd">ddd</option>
    </select>
    <br/>
    </span>
    <span id="blocBoards">
    </span>
    </div>
    <div id="blocParams">
    <h3>Define the parameters:</h3>
    <p>
    <script language="Javascript">
    var val1 = 95;
    </script>
    <label class="visu">Connected :</label>
    <select id="val1" onchange="val1 = this.value;" name="param1">
    <option value="95">no</option>
    <option value="94">yes</option>
    </select>
    </p>
    <p>
    <script language="Javascript">
    var val2 = 93;
    </script>
    <label class="visu">Connected to another board :</label>
    <select id="val2" onchange="val2 = this.value;" name="param2">
    <option value="93">no</option>
    <option value="92">yes</option>
    </select>
    </p>
    <input type="submit" onclick="var req ='id_valeur='+val1; req = req+' OR id_valeur='+val2; ; alert('req vaut:'+req); loadparamind(req, '2', '22');" value="OK"/>
    </div>
    <div id="blocParamsind"/>
    </div>
    </div>
    </body>
    <div id="_firebugConsole" style="display: none;" FirebugVersion="1.4.2"/>
    </html>
    et fire bug me r�pond :"val1 is not defined
    function onclick(event) { var req = "id_valeur=" + val1; req = req + " OR id_valeur=" + val2; alert("req vaut:" + req); loadparamind(req, "2", "21"); }(click clientX=700, clientY=292)"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    hum... �trange, en copiant ce code dans une nouvelle page, cela fonctionne, pourtant, je n'ai fait qu'un copi� coller du code. J'ai utilis� l'onglet "html" de firebug pour r�cup�rer le code, car puisque les diff�rents �l�ments de la page se chargent en ajax, le code entier n'est pas apparent directement depuis le navigateur.

    J'ai uniquement supprimer les �num�rations (1 et 2, voir ci-dessous) dans les balises script, mais elles semblent �tre g�n�r�es par firebug car ce texte n'est pas "selectionnable", il est gris�.

    Il y avait
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script language="Javascript">
    1
    2 var val1 = 95;
    </script>
    <label class="visu">Connected :</label>
    <select id="val1" onchange="val1 = this.value;" name="param1">
    </select>
    </p>
    <p>
    <script language="Javascript">
    1
    2 var val2 = 93;
    </script>

  7. #7
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    D�tails du profil
    Informations personnelles :
    �ge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par d�faut
    RE,
    car puisque les diff�rents �l�ments de la page se chargent en ajax,
    Si les scripts sont charg�s depuis AJAX, il se peut que ton probl�me vienne de l�... Les scripts ne sont pas interpr�t�s si tu les injectes via un simple innerHTML par exemple.

    ERE

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    J'apelle les pages qui sont charg�es par le biais d'ajax en appelant des fonctions de ce type:
    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
    function loadpage(board, rel) {
     
    var param = document.getElementById('blocParams');
    param.innerHTML = "In process, please wait...";
    creerRequete();
    var url = 'testparam.php?board='+board+'&rel='+rel;
    requete.open('GET', url, true);
     
    requete.onreadystatechange = function() {
    if(requete.readyState == 4) {
    if(requete.status == 200) {
     
    var resultat = requete.responseText;
    param.innerHTML = resultat;
    }
    }
    };
    requete.send(null);
    }
    Mais je ne pense pas que le probl�me vienne de la, parce que le code qui plante est charg� par le 3eme script ajax de la page, et les deux premiers se chargent sans probleme, avec le m�me type de fonction.

  9. #9
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    bingo !
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    param.innerHTML = resultat;
    resultat est du string , tu ne peux pas injecter du script en innerHTML
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    Je t'avoue que je ne connaissais pas cette subtilit�.

    Mais alors, comment expliquer que la page appel�e par la fonction s'affiche bien, et que le seul probl�me est que l'initialisation des variables javascript de la page ne semble pas s'effectuer?

  11. #11
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    la page oui c'est du code html il est donc interpr�t� plus ou moins consciencieusement (certains objets pouvant ne pas etre pris en compte par le DOM)
    pour ce qui est du script c'est � la base une erreur de conception
    ajax n'est fait que pour rapatrier du string ou du xml
    le srcipt de base doit d�ja etre sur la page et ajax ne doit recup�rer que des param�tres
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    Merci pour l'�claircissement, mon probl�me doit donc effectivement venir de la.
    Je vais essayer d'arranger ca.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Par d�faut
    Au final, je m'en suis sorti autrement, en utilisant

    document.forms['...'].elements[i].options[document.forms['...'].elements[i].selectedIndex].value

    Merci a ceux qui ont pass� du temps � m'aider.

Discussions similaires

  1. memset, initialisation de variables.
    Par sympho dans le forum C
    R�ponses: 4
    Dernier message: 31/12/2005, 21h20
  2. R�ponses: 11
    Dernier message: 07/04/2005, 10h20
  3. [VB.NET] Initialiser les variables
    Par Dnx dans le forum ASP.NET
    R�ponses: 8
    Dernier message: 06/04/2005, 16h22
  4. [VB6]Initialiser une variable Static dans un �venement
    Par loverdose dans le forum VB 6 et ant�rieur
    R�ponses: 16
    Dernier message: 20/01/2005, 14h57
  5. R�ponses: 9
    Dernier message: 29/06/2004, 08h40

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