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 :

ma variable n'arrive pas dans la fonction js


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut ma variable n'arrive pas dans la fonction js
    Bonjour tout le monde,

    J'appelle une fonction javascript et je lui passe 4 paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="checkbox" id="cb_'.$i.'" name="cb_'.$i.'" checked value='.$resultat['ID'].' onclick="mise_a_jour_cours(this.id,this.value,'.$_SESSION['matricule_to_use'].', \''.$_SESSION['Filiere_actuelle'].'\')">';
    J'arrive dans la fonction javascript, je teste les 4 paramètres avec des alertes, les 4 sont ok.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function mise_a_jour_cours(id_cb,valeur_cb,matricule,filiere)
    {
    	alert(filiere);
    	//id_cb va etre utilisé ci-dessous pour décocher un cb qui aurait été coché et qui fait dépasser l'ECTS a + de 10
    	alert(matricule);
    	alert(id_cb);
    	alert(valeur_cb);
    à partir de la même fonction, je crée un bouton avec innerHTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('btn_cloture').innerHTML = '<input type="button" value="Imprimer et clôturer mes choix" onclick="cloture(filiere);"/>';
    J'arrive bien dans la fonction mais l'alerte est vide

    Sauriez-vous me dire ce que j'ai encore fait qui n'est pas correcte svp ?

    Merci d'avance.

    beegees

    Voici mon 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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    function getXhr()
    {
    	var xhr = null; 
    	if(window.XMLHttpRequest) // Firefox et autres
    	xhr = new XMLHttpRequest(); 
    	else if(window.ActiveXObject){ // Internet Explorer 
    	try {
    		xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    		xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	} else { // XMLHttpRequest non supporté par le navigateur 
    	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	xhr = false; 
    	} 
    	return xhr;
    }
     
    function mise_a_jour_cours(id_cb,valeur_cb,matricule,filiere)
    {
    	alert(filiere);
    	//id_cb va etre utilisé ci-dessous pour décocher un cb qui aurait été coché et qui fait dépasser l'ECTS a + de 10
    	alert(matricule);
    	alert(id_cb);
    	alert(valeur_cb);
    	var compteur = 12;
    	var i = 1;
    	var total_ECTS = 0;
    	//je construis le xhr.send.  Je concatene les valeurs du tableau afin de ne pas devoir envoyer le tableau et chipoter avec explode
    	for(i;i<=compteur;i++)
    	{
    		//si la checkbox est checké, je mets sa valeur dans le tableau
    		if(document.getElementById('cb_'+i).checked == 1)
    		{
    			//alert(i + ' n\'est pas décoché ');	
    			//alert("i vaut " + i);
    			//je crée une chaine qui contient les numéros de cours a envoyer a PHP (xhr.send d'AJAX) 
    			//alert(document.getElementById('nbreECTS_'+i).value);
    			//j'ajoute le parseInt car sans cela, il concactene !!!!
    			total_ECTS += parseInt(document.getElementById('nbreECTS_'+i).value);
     
    			//lorsqu'un étudiant choisit un cours, je vérifie que le total déja engendré + l'ECTS du cours choisit ne sera pas supérieur a 10
    		}
    	}
    	//alert("le nombre de ECTS est de : " + total_ECTS);
     
    	//si lorsqu'un visiteur clique sur un CB et que l'ECTS est a > a 10, je décoche le cb dont l'id a été passé a la fonction (le dernier cliqué), le return
    	//permet d'arreter le code et donc de ne pas enregistrer dans la bd les cours ni le nombre d'ECTS.
    	if(total_ECTS > 10)
    	{
    		document.getElementById(id_cb).checked = false;
    		alert("En choisissant ce cours, le total d'ECTS sera supérieur a 10, opération annulée car seul un maximum de 10 ECTS peut etre choisis");
    		return;
    	}
    	//alert("total_ECTS " + total_ECTS);
    	//alert("le to send : "+ tosend);
     
    	var xhr = getXhr();
    	i=1;
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function()
    	{
    		//alert(xhr.readyState);
    		//alert(xhr.status);
     
    		if(xhr.readyState == 4 && xhr.status == 200)
    		{
    			retour = xhr.responseText;
    			//alert(retour);
    			//document.getElementById("test").value = retour;
     
    			if(total_ECTS < 10)
    			   {
    				   //j'affiche le nombre d'ECTS
    				   document.getElementById('ECTS').innerHTML = '<FONT face="Comic Sans MS" color="#0000DD" size=30>' + total_ECTS + ' ECTS</font>';
    				   //ce code agit au changement de l'état de la checkbox cliquée, si l'ects est < a 10 apres le clique, je retire de clôture
    				   document.getElementById('btn_cloture').innerHTML = '';
    				   //si le nombre total d'ECTS est inférieur a 10, j'active les checkboxes car l'étudiant peut choisir au maximum 10 ECTS.
    				   for(i=1;i<=compteur;i++)
    					{
    						if(document.getElementById('cb_'+i).checked == 0)
    						{
    							document.getElementById('cb_'+i).disabled = false;
    						}
    					}
     
    			   }
    			else
    			{
    				document.getElementById('ECTS').innerHTML = '<FONT face="Comic Sans MS" color="#0000DD" size=30>' + total_ECTS + ' ECTS</font>';
    				//ce code agit au CHANGEMENT de l'état de la checkbox cliquée, si l'ects est > a 10 apres le clique, j'affiche le bouton de clôture				
    				//le probleme est ici
    //				alert("ici");
    				//alert('ici ' + filiere);
    				document.getElementById('btn_cloture').innerHTML = '<input type="button" value="Imprimer et clôturer mes choix" onclick="cloture(filiere);"/>'; 
     
    				//si le nombre total d'ECTS est égal ou supérieur a 10, je désactive les checkboxes car l'étudiant ne peut pas choisir plus de 10 ECTS.
    				for(i=1;i<=compteur;i++)
    				{
    					if(document.getElementById('cb_'+i).checked == 0)
    					{
    						document.getElementById('cb_'+i).disabled = true;
    					}
    				}
    			}
    		}
    	}
     
     
    	xhr.open("POST","AJAX/Enregistrer_cours.php",true);
    	// ne pas oublier ça pour le post
    	//indispensable pour le POST	
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send("matricule="+matricule+"&valeur_cb="+valeur_cb+"&total_ECTS="+total_ECTS);
     
    }
    et

    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
    function getXhr()
    {
    	var xhr = null; 
    	if(window.XMLHttpRequest) // Firefox et autres
    	xhr = new XMLHttpRequest(); 
    	else if(window.ActiveXObject){ // Internet Explorer 
    	try {
    		xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    		xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	} else { // XMLHttpRequest non supporté par le navigateur 
    	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	xhr = false; 
    	} 
    	return xhr;
    }
     
    function cloture(filiere)
    {
    	//je passe la filiere pour donner une valeur au compteur, soit 12 pour PHAR5S-P ou plus pour PHAR5S-D
    	alert(filiere);
    	var compteur = 0;
    	var i = 1;
    	if(filiere == "PHAR5S-P")
    	{
    		compteur = 12;
    	}
    	else
    	{
    		compteur = 17;
    	}	
    	if(confirm('voulez-vous clôturé vos choix ?'))
    	{
    		var xhr = getXhr();
    		for(i;i<=compteur;i++)
    		{
    			document.getElementById('cb_'+i).disabled = true;
    			//je lui passe la variable de session PHP, cela me permet de récupérer sa valeur dans javascript
    		}
    		document.getElementById('btn_cloture').innerHTML = '<input type="button" value="Imprimer" onclick="window.open(\'PDF/resume_cours.php\')">';
     
    		xhr.onreadystatechange = function()
    		{
    			//alert(xhr.readyState);
    			//alert(xhr.status);
     
    			if(xhr.readyState == 4 && xhr.status == 200)
    			{
    				retour = xhr.responseText;
    				alert(retour);
    				window.open('PDF/resume_cours.php');				
    			}
    		}
     
     
    		// Ici on va voir comment faire du post
    		//j'ouvre le fichier Scripts/Comptage.php
    		xhr.open("POST","AJAX/cloture.php",true);
    		// ne pas oublier ça pour le post
    		//indispensable pour le POST	
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send("");
    	}
     
    }

  2. #2
    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
    bien que innerHTML ne soit pas recommandé pour ça ...
    voici un pansement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('btn_cloture').innerHTML = '<input type="button" value="Imprimer et clôturer mes choix" onclick="cloture(\''+filiere+'\');"/>';
    attention aux quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    onclick="cloture(\' '+filiere+' \');"/>';
    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 !

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/08/2014, 21h09
  2. qu'est ce qui va pas dans cette fonction???
    Par access001 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/04/2006, 13h10
  3. Variable générale non trouvée dans une fonction
    Par mickael.be dans le forum Langage
    Réponses: 10
    Dernier message: 21/02/2006, 19h18
  4. Valeur d'e variable d'une fct dans autre fonction
    Par Torpedox dans le forum Langage
    Réponses: 3
    Dernier message: 11/11/2005, 08h48
  5. Réponses: 4
    Dernier message: 05/10/2005, 18h19

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