2013-09-25 35 views
7

Làm thế nào để vượt qua chức năng a_href = $(this).attr('href'); giá trị cho toàn cầu a_href, hãy a_href="home"jQuery làm biến toàn cầu

+0

Vâng, có vẻ khá nhiều. – Ryan

+0

Nó sẽ hoạt động như bạn mong đợi. – PSL

+0

chỉ có vấn đề là nếu 'var a_href' là bên trong một xử lý sẵn sàng dom ... biến mush tuyên bố được trong không gian toàn cầu hoặc sử dụng' window.a_href = $ (this) .attr ('href') ' –

Trả lời

22

Mã của bạn trông tốt, ngoại trừ khả năng rằng nếu biến tuyên bố là bên trong một xử lý đọc dom sau đó nó sẽ không phải là một biến toàn cầu ... nó sẽ là một biến đóng cửa

jQuery(function(){ 
    //here it is a closure variable 
    var a_href; 
    $('sth a').on('click', function(e){ 
     a_href = $(this).attr('href'); 

      console.log(a_href); 
     //output is "home" 

     e.preventDefault(); 
    } 
}) 

Để thực hiện các biến toàn cầu một giải pháp, là để khai báo biến trong phạm vi toàn cầu

var a_href; 
jQuery(function(){ 
    $('sth a').on('click', function(e){ 
     a_href = $(this).attr('href'); 

      console.log(a_href); 
     //output is "home" 

     e.preventDefault(); 
    } 
}) 

khác là để thiết lập các biến như là một thuộc tính của đối tượng cửa sổ

window.a_href = $(this).attr('href') 

Tại sao giao diện điều khiển in ấn undefined

Bạn nhận được kết quả là undefined bởi vì mặc dù biến được khai báo, bạn không phải là initia lized nó với một giá trị, giá trị của biến được thiết lập chỉ sau khi các yếu tố a được nhấp cho đến thời điểm đó biến sẽ có giá trị undefined. Nếu bạn không khai báo biến nó sẽ ném một ReferenceError

+0

Cảm ơn một rất nhiều, sẽ đánh dấu nó :-) – olo

+0

Tôi biết điều này là cũ, nhưng người đàn ông này đã giúp tôi ra ngoài. Cảm ơn –

0

đặt biến trên cửa sổ:

window.a_href = a_href; 
1

Bạn có thể tránh khai báo biến toàn cục bằng cách thêm chúng trực tiếp đến đối tượng toàn cầu:

(function(global) { 

    ... 

    global.varName = someValue; 

    ... 

}(this)); 

Một nhược điểm của phương pháp này là globa.varName sẽ không tồn tại cho đến khi dòng mã được thực hiện, nhưng có thể dễ dàng làm việc xung quanh. Bạn cũng có thể xem xét một kiến ​​trúc ứng dụng trong đó các hình cầu như vậy được giữ trong một bao đóng chung cho tất cả các chức năng cần chúng, hoặc như các thuộc tính của một đối tượng lưu trữ dữ liệu thích hợp có thể truy cập.