2010-04-17 42 views
16

Tôi có một số chức năng Jquery mà tôi giữ trong tệp "custom.js". Trên một số trang, tôi cần chuyển các biến PHP tới Jquery để một số bit Jquery cần phải duy trì trong các tài liệu HTML. Tuy nhiên, như bây giờ tôi đang cố gắng để cấu trúc lại những thứ ở mức tối thiểu, tôi vấp ngã trên như sau:Jquery: Chức năng gọi từ các tài liệu khác nhau

Nếu tôi đặt điều này trong custom.js tôi:

$(document).ready(function() 
{ 
    function sayHello() { 
     alert("hello"); 
    } 
} 

Và điều này trong một tài liệu HTML :

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     sayHello(); 
    }); 
</script> 

... chức năng không được gọi. Tuy nhiên, nếu cả hai được đặt trong tài liệu HTML, hàm hoạt động tốt.

Có một số loại tài sản công khai mà tôi cần phải khai báo cho hàm hay làm cách nào để nhận các hàm Jquery trong HTML của tôi để nói chuyện với các tệp .js bên ngoài? Chúng được bao gồm chính xác và hoạt động tốt nếu không.

Cảm ơn.

Trả lời

29

Vấn đề là bạn đang định sayHello trong hàm ẩn danh được khai báo trên dòng này:

$(document).ready(function() 

Kết quả là, sayHello được scoped để chỉ có chức năng đó. Nếu bạn muốn gọi sayHello từ bất cứ nơi nào khác trong ứng dụng của bạn, chẳng hạn như HTML trên trang web của bạn hoặc một dòng trong custom.js, bạn sẽ cần phải thay đổi custom.js và xác định nó ở bên ngoài gọi đến $(document).ready:

function sayHello() 
{ 
    alert("hello"); 
} 

$(document).ready(function() 
{ 
    sayHello(); 
} 
+0

Cảm ơn - tất nhiên, có ý nghĩa hoàn hảo. Sẽ chấp nhận câu trả lời của bạn, cần phải chờ thời gian giới hạn. – Tom

7

chỉ làm cho hàm biến toàn cầu

sayHello=function() { 
    alert("hello"); 
} 
+0

nó sẽ làm việc để thiết lập các container jquery như là một var là tốt? Giống như 'sayHello = $ (tài liệu) .ready (function() {...' – tim

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