2012-08-05 12 views
13

Va bene così ho questo codice nel corpo:javascript: ottenere il valore della variabile di una funzione all'interno di un'altra funzione

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

E questo codice nello 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> 

Voglio un avviso che mostra il valore della elemento full_name, ma non sembra funzionare, qualcuno sa perché? : S

risposta

15

nameContent esiste solo all'interno della funzione first(), come definito nella funzione first().

a fare la sua portata più ampia, definirlo al di fuori delle funzioni:

var nameContent; 

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

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

Un approccio leggermente migliore sarebbe quella di return il valore, come variabili globali ottenere disordinato molto rapidamente:

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

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

    alert(name); 
} 

doStuff(); 
+0

Penso che usando una variabile globale lo ** stesso ** che usa una funzione per restituire il suo valore, entrambi sono scope globali, no? Un problema riguardante il tuo approccio è che sempre quando viene chiamato getFullName(), verrà eseguita una ricerca DOM, se venisse usata una var, la ricerca DOM verrebbe chiamata solo una volta. –

+1

No, sono piuttosto diversi perché le variabili globali che contengono valori statici non sono funzioni. Per quanto riguarda la ricerca, non è questo il punto? Vuoi ottenere il valore corrente dell'elemento con l'id di 'full_name'. Se quel valore fosse statico, sarebbe inutile che una funzione restituisse la variabile statica. – Blender

+1

Ciò che voglio dire è che può essere ottimizzato. Puoi tenere l'oggetto DOM in una var: 'nameElement = document.getElementById ('full_name');' e ogni volta che ne ha bisogno, usa 'nameElement.value'. –

4

Il tuo nome L'ambito contenuto è solo all'interno della prima funzione. Non otterrai mai il suo valore in questo modo.

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

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

è necessario un estratto conto nella prima funzione.

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

e poi nella vostra seconda funzione può essere:

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

La variabile nameContent si trova all'interno del campo di applicazione funzioni e non visibili all'esterno che la funzione quindi se si desidera utilizzare il nameContent al di fuori della funzione, allora dichiararlo global all'interno del tag <script> e utilizzare funzioni all'interno senza la parola chiave var come segue

<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> 
Problemi correlati