2011-04-26 47 views
10

quy tắc xung quanh chức năng gọi điện từ js này sang js khác là gì? Tôi nghĩ rằng điều này làm việc nhưng tôi không chạy vào vấn đề (figured nó ra thông qua firefox) rằng một chức năng trong một tập tin js dường như không được công nhận trong tập tin js đầu tiên của tôi.gọi phương thức javascript trong tệp .js khác

Có một số quy tắc xung quanh việc đặt hàng hoặc một số thủ thuật bạn phải làm để làm việc này không?

Trả lời

7

Bạn có đang gọi hàm trong trình xử lý sự kiện hay ngay lập tức khi tệp javascript được tải? Nếu nó không có trong một trình xử lý sự kiện, thì thứ tự tải là quan trọng. Nếu bạn có phụ thuộc vòng tròn, bạn có thể cần trì hoãn một số lần khởi tạo với trình nghe "Sẵn sàng DOM" hoặc trình nghe window.onLoad.

+0

vì vậy nếu nó đến từ một trình xử lý sự kiện, tôi không cần phải lo lắng ?? – leora

3

Trình duyệt phân tích cú pháp các tệp javascript theo thứ tự chúng xuất hiện trong HTML. Vì vậy, nếu một hàm bị bắt trong tệp thứ nhất dựa vào một hàm nằm trong tệp thứ hai thì hàm đó sẽ không hoạt động. Nếu bạn sử dụng $ (function() {}); ví dụ với jQuery, điều này hướng dẫn javascript đợi cho đến khi sự kiện onload được kích hoạt từ đối tượng cửa sổ. Điều này đảm bảo tất cả các yếu tố trên trang đã được tải trước khi thực thi.

31

Bạn phải truy cập vào phạm vi toàn cầu ở đâu đó. Ví dụ:

// file1.js 
function hello() { 
    alert("Hello, world!"); 
} 
// file2.js 
$(function() { 
    hello(); 
}); 

có khả năng, bạn có một cái gì đó như thế này:

// file1.js 
$(function() { 
    function hello() { 
     alert("Hello, world!"); 
    } 
    // ... 
}); 
// file2.js 
$(function() { 
    hello(); 
}); 

hello là chỉ trong phạm vi của việc đóng cửa theo quy định tại file1.js. Vì vậy, để truy cập vào nó trong file2.js, bạn sẽ phải xuất khẩu nó vào nơi nào đó mà file2.js có thể nhận được vào nó:

// file1.js 
$(function() { 
    function hello() { 
     alert("Hello, world!"); 
    } 
    window.hello=hello; 
}); 
// file2.js 
$(function() { 
    hello(); 
}); 

Ngoài ra, các kịch bản mà các chức năng được xác định phải được nạp, phân tích cú pháp, và thực hiện trước khi chức năng có thể được gọi từ một kịch bản khác.

+0

2 dòng cuối cùng của bạn có giá trị đối với tôi. Cảm ơn bạn –

Các vấn đề liên quan