2013-02-16 47 views
5

tôi cần phải tải chức năng để lấy dữ liệu từ JS bên ngoài bao gồm trong tập tin HTML, và tôi đang làm điều này:Làm thế nào để gọi hàm bên ngoài bên trong mã jquery từ html?

<body onLoad="getTicket();"> 
...... 
</body> 

hay này:

<html> 
<body> 
    <head> 
    <script src="js/jquery.js" type="text/javascript"></script> 
    <script src="js/functions.js" type="text/javascript"></script> 
    <script> 
     $(document).ready(function() { 
      getTicket(); 
     }); 
    <script> 
    </head> 
<body> 
</html> 

hay này:

<html> 
<body> 
    <head> 
    <script src="js/jquery.js" type="text/javascript"></script> 
    <script src="js/functions.js" type="text/javascript"></script> 
    <script> 
     getTicket(); 
    <script> 
    </head> 
<body> 
</html> 

Và tôi có tính năng này.JS:

functioOne() { 

} 

functionTwo() { 

} 

$(document).ready(function() { 
    ... 
    ..... 
    function getTicket() { 
     //to do 
    } 
}); 

Nhưng does'nt nơi làm việc và trong màn hình giao diện điều khiển này:

Uncaught ReferenceError: getTicket is not defined 

trọng.

+0

bạn bao gồm tệp js bên ngoài đó vào tệp HTTML đó như thế nào? – yogi

+0

Bạn đang sử dụng trình duyệt nào? Nó có tạo ra lỗi trong bảng điều khiển của bạn không? Nếu có lỗi phân tích bên trong tệp functions.js của bạn, trình duyệt có thể 'bỏ qua' phần còn lại của tệp, khiến hàm getTicket() của bạn thành 'không' được xác định – thaJeztah

Trả lời

9

Chức năng getTicket của bạn chỉ được xác định trong ngữ cảnh (phạm vi) của đóng cửa jQuery (chức năng ẩn danh). Xác định nó trong phạm vi toàn cục thay thế (ở nơi khác trong tệp và không phải là "tham số chức năng").

Nếu bạn cần các biến từ phạm vi đó, hãy đóng gói chúng trong một không gian tên (một đối tượng) hoặc khai báo nó là window.getTicket = function() { /* ... */}.

0

Thêm <script type="text/javascript src="external.js"></script> đến head.

Sau đó, bạn phải chờ cho tài liệu được tải đầy đủ.

Vấn đề là mã của bạn được thực hiện theo cách này:

  • thực hiện external.js
  • chức năng của bạn không được định nghĩa bởi vì tài liệu chưa tải xong
  • bạn gọi hàm không xác định
  • tài liệu đã sẵn sàng

IMHO Tôi không nghĩ là một ý tưởng hay để xác định hàm bên trong $ (tài liệu) .ready. Sẽ đơn giản hơn bình thường để xác định hàm đó, sau đó gọi nó bên trong $ (tài liệu) .ready.

+0

Tại sao -1 cho câu trả lời này? – collimarco

+0

Tôi -1'd bạn khi câu trả lời của bạn chỉ là "thêm thẻ tập lệnh" (không liên quan gì đến vấn đề phạm vi chức năng bị đóng cửa, có nghĩa là anh ta không bao giờ nhìn thấy nó). Bây giờ bạn đã chỉnh sửa nó vì vậy tôi un-trừ-oneing-it. –

4

bạn có thể làm điều này:

$(document).ready(function() { 
    ... 
    ..... 
    window.getTicket = function() { 
    //to do 
    } 
}); 

khi tài liệu đã sẵn sàng, bạn sẽ có thể gọi getTicket

+0

Bạn có nghĩa là, tôi đặt mã đó trong js bên ngoài hoặc trong tệp html? – SoldierCorp

+0

trong tệp html. – sdepold

+0

Trong tệp html? Không, trong tệp JS để hoạt động! – SoldierCorp

0

Bạn phải bao gồm các tập tin js trước khi gọi hàm. Nếu bạn làm điều này:

<html> 
<body> 
    <head> 
    <!-- include script files here.(jquery and custom script files) --> 
    <script> 
     $(document).ready(function() { 
      getTicket(); 
     }); 
    </script> 
    </head> 
<body> 
</html> 

bạn phải bao gồm tệp tập lệnh trước khi gọi hàm.

+0

Rõ ràng là tôi có nó, là điều đầu tiên bạn nên làm. – SoldierCorp

+2

hey bạn đã không đóng thẻ tập lệnh chính xác. –

4

Hãy thử đặt function getTicket(){} bên ngoài hoặc doc ready:

functio One() { 

} 

function Two() { 

} 
function getTicket() { 
    //to do 
} 

$(document).ready(function() { 
... 
..... 
    getTicket(); 
}); 

Chỗ đặt của bạn của hòa nhập là hoàn hảo không có vấn đề với điều đó.

<script src="js/jquery.js" type="text/javascript"></script> 
<script src="js/functions.js" type="text/javascript"></script> 

Điều này hoàn toàn ổn.

+0

Vấn đề là getTicket() chứa mã jQuery và vì lý do đó tôi không thể đưa ra. – SoldierCorp

+0

Không nên có bất kỳ vấn đề gì tôi nghĩ nhưng bạn có thể thử điều này mặc dù. – Jai

+0

@SoldierCorp tài liệu trên phần sẵn sàng chỉ đảm bảo rằng DOM được điền trước khi jQuery chạy. Bạn có thể xác định mã bên ngoài nó, chỉ miễn là nó chưa được gọi. (bây giờ có hay không bạn nên là một câu hỏi khác) – DrLivingston

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