2012-08-05 44 views
13

ổn vì vậy tôi có mã này trong cơ thể:javascript: lấy giá trị biến của một chức năng trong chức năng khác

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

Và mã này trong kịch bản

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

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

Tôi muốn có một cảnh báo cho thấy giá trị của yếu tố full_name, nhưng nó dường như không hoạt động, không ai biết tại sao? : S

Trả lời

15

nameContent chỉ tồn tại trong hàm first(), như bạn đã xác định trong hàm first().

Để làm cho phạm vi của nó rộng hơn, định nghĩa nó ngoài các chức năng:

var nameContent; 

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

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

Một cách tiếp cận tốt hơn một chút sẽ được return giá trị, như biến toàn cục được lộn xộn rất nhanh chóng:

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

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

    alert(name); 
} 

doStuff(); 
+0

Tôi nghĩ rằng bằng cách sử dụng một var toàn cục ** ** giống như sử dụng một hàm để trả về giá trị của nó, cả hai đều là phạm vi toàn cầu, phải không? Một vấn đề liên quan đến cách tiếp cận của bạn là luôn luôn khi getFullName() được gọi, một tìm kiếm DOM sẽ được thực hiện, nếu một var được sử dụng, tìm kiếm DOM đó sẽ được gọi một lần. –

+1

Không, chúng khá khác nhau bởi vì các biến toàn cầu giữ giá trị tĩnh không phải là hàm. Đối với việc tìm kiếm, đó không phải là vấn đề? Bạn muốn lấy giá trị hiện tại của phần tử với id của 'full_name'. Nếu giá trị đó là tĩnh, nó sẽ là vô nghĩa để có một hàm trả về biến tĩnh. – Blender

+1

Điều tôi thực sự muốn nói rằng nó có thể được tối ưu hóa. Bạn có thể giữ đối tượng DOM trong một var: 'nameElement = document.getElementById ('full_name');' và bất cứ khi nào cần giá trị của nó, sử dụng 'nameElement.value'. –

4

Phạm vi nameContent của bạn chỉ nằm trong hàm đầu tiên. Bạn sẽ không bao giờ có được giá trị như vậy.

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

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

bạn cần có câu lệnh trả về trong hàm đầu tiên của mình.

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

và sau đó trong chức năng thứ hai của bạn có thể là:

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

biến nameContent của bạn là bên trong phạm vi chức năng và không nhìn thấy được bên ngoài chức năng đó vì vậy nếu bạn muốn sử dụng nameContent bên ngoài của hàm sau đó khai báo số global bên trong thẻ <script> và sử dụng các chức năng bên trong mà không có từ khóa var như sau

<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> 
Các vấn đề liên quan