web-dev-qa-db-fra.com

javascript: récupère la valeur d'une variable de fonction dans une autre fonction

ok donc j'ai ce code dans le corps:

<input type="text" value="haha" id="full_name"/>

Et ce code dans le script

<script language="javascript" type="text/javascript">
    function first(){
        var nameContent=document.getElementById('full_name').value;
    }

    function second() {
        first();
        y=nameContent; 
        alert(y);
    }
    second();
</script>

Je veux une alerte indiquant la valeur de l'élément full_name, mais cela ne semble pas fonctionner, quelqu'un sait-il pourquoi? : S

15
Maria

nameContent n'existe que dans la fonction first(), comme vous l'avez défini dans la fonction first().

Pour élargir sa portée, définissez-la en dehors des fonctions:

var nameContent;

function first(){
    nameContent=document.getElementById('full_name').value;
}

function second() {
    first();
    y=nameContent; alert(y);
}
second();

Une approche légèrement meilleure serait de return la valeur, car les variables globales deviennent très rapidement désordonnées:

function getFullName() {
  return document.getElementById('full_name').value;
}

function doStuff() {
  var name = getFullName();

  alert(name);
}

doStuff();
18
Blender

Votre portée nameContent est uniquement à l'intérieur de la première fonction. Vous n'obtiendrez jamais sa valeur de cette façon.

var nameContent; // now it's global!
function first(){
    nameContent = document.getElementById('full_name').value;
}

function second() {
    first(); 
    y=nameContent; 
    alert(y);
}
second();
4
Marcelo Assis

vous avez besoin d'une déclaration de retour dans votre première fonction.

function first(){
    var nameContent = document.getElementById('full_name').value;
    return nameContent;
}

puis dans votre deuxième fonction peut être:

function second(){
    alert(first());
}
1
Jason Fingar

Votre variable nameContent est à l'intérieur de l'étendue de la fonction et n'est pas visible à l'extérieur de cette fonction, donc si vous souhaitez utiliser le nameContent à l'extérieur de la fonction, déclarez-la global à l'intérieur du <script> tag et utiliser les fonctions internes sans le mot clé var comme suit

<script language="javascript" type="text/javascript">
    var nameContent; // In the global scope
    function first(){
        nameContent=document.getElementById('full_name').value;
    }

    function second() {
        first();
        y=nameContent; 
        alert(y);
    }
    second();
</script>
1
The Alpha