Changer la valeur d'une variable par une fonction

Signaler
Messages postés
9
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
20 janvier 2010
-
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
-
Bonjour,

J'ai un problème tout bête mais malheureusement, je n'arrive pas à trouver la solution.

J'ai besoin de faire un traitement dans une fonction.
Je stock le résultat dans une variable (jusque la tout va bien)
sauf que je n'arrive pas a récupérer le contenu de cette variable en dehors de cette fonction.

J'ai beau mettre 'var' avant le nom de ma variable. Mettre des 'return' rien n'y fais.


Voici une version (ultra) simplifiée de ce que j'ai en tete :

<head>
<script type="text/javascript">
coucou = 'rien';
function Coucou(){
var coucou = 'coucou';
return coucou;
}
</script>
</head>


[ ICI]


<script>
document.write(coucou);
</script>

En gros il faudrait que quand je clique sur le lien ça affiche 'coucou' au lieu de 'rien'.

Dsl de poser une question aussi bête mais franchement la je sèche ...

Merci d'avance

10 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
coucou = 'rien';// ceci est une variable globale
function Coucou(){
var coucou = 'coucou';// ceci est une variable locale
return (coucou);// ici on retourne la valeur de coucou locale mais coucou globale n'est pas modifié
}
pour modifier coucou globale il faut lui affecter la valeur retournée par la fonction Coucou()
coucou = Coucou();
maintenant si tu fais
[ ICI]

tu auras le bon résultat...
;O)
Messages postés
9
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
20 janvier 2010

Je tiens a préciser que j'ai essayé avec et sans 'var' dans ma fonction (pour rendre la variable globale)

Et si je mets :
coucou = 'rien';
avant ma fonction, c'est par ce que si je ne le fais pas.
il me dis que coucou 'is not defined'

Dsl pour cet oubli
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
1
J'ai le même problème, mais ca ne fonctionne toujours pas.

Sur mon site, j'ai un système de commentaire assez simple et qui fonctionne très bien. J'essaie maintenant d'afficher seulement les 5 derniers commentaires laissés, ce qui fonctionne aussi, mais je veux faire un lien pour que lorsqu'on clique, tous les commentaires s'affichent sur ma page et donc changer ma variable. Voici une partie de mon code :

var guitare=x.length-5;
for (i = x.length-1; i >= guitare; i--)
{
document.write("<tr><td ...

et ma fonction :

function voirsuitedown(){
var guitare=0;
return (guitare);
}

J'aimerais changer ma variable "guitare" pour mettre 0, ce qui afficherait tous mes commentaires à merveille ! J'ai mis sur mon bouton un onmousedown qui fonctionne bien si j'essaie d'autre fonction quelconque, mais onmousedown='guitare = voirsuitedown()' ne fonctionne pas.

J'ai besoin d'aide svp !
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
rien à voir avec le sujet initial, pas un problème de variable mais d'approche
//-------------------------------
function Affiche_New( deb_, fin_){
  for( var i = deb_; i > fin_; i--){
    //-- ICI le code d'affichage
  }
}

ce qui te donnes un appel du type
onmouseover="Affiche_New( Maxi_Tableau, 0);"


PS : il est préférable dans ce cas d'ouvrir un autre topic...
;O)
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
1
Ca fonctionne, mais j'ai encore un problème. Voici mon script :

var xmlDoc=null;

if (window.XMLHttpRequest)

  {

  xhttp=new XMLHttpRequest();

  }

else // Internet Explorer 5/6

  {

  xhttp=new ActiveXObject("Microsoft.XMLHTTP");

  }

xhttp.open("GET","comments.xml",false);

xhttp.send("");

xmlDoc=xhttp.responseXML;

var x=xmlDoc.getElementsByTagName("comment");
var guitare=x.length-1;

function Affiche_New( deb_, fin_){

if (xmlDoc!=null)

{ 

document.write("\");

for (i = deb_; i >= fin_; i--)

{

document.write(\"----
");

document.write(x[i].getAttribute("nom"));

document.write(" - ");

document.write(x[i].getAttribute("date"));

document.write("
 
");

document.write(x[i].getAttribute("texte"));

document.write("
 , \");

}

document.write("
");

}
else
{
document.write("NON-DISPONIBLE");
}
}


et je place celui-ci dans le body de ma page :

<script type="text/javascript" language="JavaScript">
Affiche_New(x.length-1, x.length-5);
</script>


et ça l'affiche un tableau avec les 5 plus récents commentaires inscrits dans mon fichier xml. Par contre, lorsque je rappelle la fonction à l'aide de mon bouton du genre onclick='Affiche_New(x.length-1, 0)', la page reload et je n'ai plus que mon tableau de commentaires et rien d'autre (les nouvelles données y sont par contre). J'aimerais lui spécifier un endroit ou s'éxécuter, mais j'ignore comment...

Est-ce que quelqu'un pourrait m'aider svp ? J'en arrache vraiment.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
document.write est à proscrire, il écrit dans le flux du document et de ce fait efface et remplace le contenu du document si celui ci est chargé.

Il est préférable, entre autre, d'utiliser la propriété innerHTML;
//-- Recup objet element dans lequel on veut mettre le texte
var Obj = document.getElementById('id_element');
//-- Exemple de texte
var szTxt = "Le texte a mettre !";
//-- mise du texte dans l'element
Obj.innerHTML = szTxt;

;O)
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
1
J'ai trouvé un code en cherchant sur le net, je pourrais facilement le modifier, mais j'arrive pas à faire fonctionner le innerhtml.

<html>
<head>
<title>Sample code - Traversing an HTML Table with JavaScript and DOM Interfaces</title>
<script>

    function start() {
        // get the reference for the body
        var body = document.getElementsByTagName("body")[0];

        // creates a <table> element and a <tbody> element
        var tbl     = document.createElement("table");
        var tblBody = document.createElement("tbody");

        // creating all cells
        for (var j = x.length-1; j >= x.length-5; j--) {
            // creates a table row
            var row = document.createElement("tr");

            for (var i = 0; i < 2; i++) {
                // Create a <td> element and a text node, make the text
                // node the contents of the <td>, and put the <td> at
                // the end of the table row
                var cell = document.createElement("td");
                var cellText = document.createTextNode("cell is row "+j+", column "+i);
                cell.appendChild(cellText);
                row.appendChild(cell);
            }

            // add the row to the end of the table body
            tblBody.appendChild(row);
        }

        // put the <tbody> in the <table>
        tbl.appendChild(tblBody);
        // appends <table> into 
        body.appendChild(tbl);
        // sets the border attribute of tbl to 2;
        tbl.setAttribute("border", "2");
    }
</script>
</head>



</html>


J'aimerais créer mon tableau dans "TABLEAU ICI", mais je n'y arrive vraiment pas. MERCI ENCORE POUR TON AIDE !
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
je répète il aurait mieux valu ouvrir un autre topic mais bon...
tu sorts d'où le tableau x dans
for (var j = x.length-1; j >= x.length-5; j--) {
il n'est pas en paramètre de la fonction !

;O)
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
1
J'ai commencé à le modifier légèrement, je croyais avoir retiré ce que j'avais fait, mais j'ai oublié ce morceau là. Avec mes légères modifications, c'est ca que ça donnait en vrai :

<html>
<head>
<title>Sample code - Traversing an HTML Table with JavaScript and DOM Interfaces</title>
<script>
var xmlDoc=null;

if (window.XMLHttpRequest)

  {

  xhttp=new XMLHttpRequest();

  }

else // Internet Explorer 5/6

  {

  xhttp=new ActiveXObject("Microsoft.XMLHTTP");

  }

xhttp.open("GET","comments.xml",false);

xhttp.send("");

xmlDoc=xhttp.responseXML;

var x=xmlDoc.getElementsByTagName("comment");

    function start() {
        // get the reference for the body
        var body = document.getElementsByTagName("body")[0];

        // creates a <table> element and a <tbody> element
        var tbl     = document.createElement("table");
        var tblBody = document.createElement("tbody");

        // creating all cells
        for (var j = x.length-1; j >= x.length-5; j--) {
            // creates a table row
            var row = document.createElement("tr");

            for (var i = 0; i < 2; i++) {
                // Create a <td> element and a text node, make the text
                // node the contents of the <td>, and put the <td> at
                // the end of the table row
                var cell = document.createElement("td");
                var cellText = document.createTextNode("cell is row "+j+", column "+i);
                cell.appendChild(cellText);
                row.appendChild(cell);
            }

            // add the row to the end of the table body
            tblBody.appendChild(row);
        }

        // put the <tbody> in the <table>
        tbl.appendChild(tblBody);
        // appends <table> into 
        body.appendChild(tbl);
        // sets the border attribute of tbl to 2;
        tbl.setAttribute("border", "2");
    }
</script>
</head>

guitare


</html>


Sinon tu peux seulement remplacer mon x.length-1 et -5 par 0 et 5 et mettre j++. À l'avenir j'ouvrirai un autre topic, c'est promis ! Merci !
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
1
J'ai réglé mon problème et tout fonctionne à merveille.