2012-08-05 16 views
13

bien, así que tengo este código en el cuerpo:javascript: obtener el valor de la variable de una función dentro de otra función

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

Y este código en escritura

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

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

quiero una alerta que muestra el valor de la elemento full_name, pero parece que no funciona, ¿alguien sabe por qué? : S

Respuesta

15

nameContent solo existe dentro de la función first(), como lo definió dentro de la función first().

Para hacer que su ámbito de aplicación más amplio, definir fuera de las funciones:

var nameContent; 

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

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

Un poco mejor enfoque sería return el valor, como variables globales se ensucian muy rápidamente:

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

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

    alert(name); 
} 

doStuff(); 
+0

Creo que al usar una var global el ** mismo ** que al usar una función para devolver su valor, ambos son de alcance global, ¿no es así? Un problema con respecto a su enfoque es que siempre cuando se llama a getFullName(), se realizará una búsqueda DOM, si se usó una var, esa búsqueda DOM se llamaría solo una vez. –

+1

No, son bastante diferentes porque las variables globales que contienen valores estáticos no son funciones. En cuanto a la búsqueda, ¿no es ese el punto? Desea obtener el valor actual del elemento con el id de 'full_name'. Si ese valor fuera estático, sería inútil tener una función que devuelva la variable estática. – Blender

+1

Lo que realmente quiero decir es que se puede optimizar. Puede mantener el objeto DOM en var: 'nameElement = document.getElementById ('full_name');' y cada vez que necesite su valor, use 'nameElement.value'. –

4

Su alcance de contenido es solo dentro de la primera función. Nunca obtendrás su valor de esa manera.

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

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

necesita una declaración de devolución en su primera función.

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

y luego en su segunda función puede ser:

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

La variable nameContent está dentro del ámbito de la función y no es visible fuera de esa función por lo que si desea utilizar el nameContent fuera de la función a continuación, declarar que global dentro de la etiqueta <script> y utilizar funciones dentro sin la palabra clave var de la siguiente manera

<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> 
Cuestiones relacionadas