2010-03-04 35 views
26

Làm thế nào để bạn gọi hàm lol() từ bên ngoài $ (document) .ready() ví dụ:

$(document).ready(function(){ 
    function lol(){ 
    alert('lol'); 
    } 
}); 

Cố gắng:

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

Và chỉ đơn giản là:

lol(); 

Nó phải được gọi trong một javascript bên ngoài như:

function dostuff(url){ 
    lol(); // call the function lol() thats inside the $(document).ready() 
} 

Trả lời

48

Xác định các chức năng trên đối tượng cửa sổ để làm cho nó toàn cầu từ bên trong một phạm vi chức năng:

$(document).ready(function(){ 
    window.lol = function(){ 
    alert('lol'); 
    } 
}); 
+0

giải pháp đơn giản này hoạt động cho tôi –

+1

Đây là giải pháp tuyệt vời, đã tiết kiệm cho tôi số giờ! – Oritm

+0

Trong số tất cả các câu trả lời khó hiểu hoặc phức tạp mà tôi đã tìm thấy, đây là điều duy nhất làm việc cho tôi. – jyoseph

37

Bên ngoài khối chức năng được xác định, nó nằm ngoài phạm vi và bạn sẽ không thể gọi nó.

Tuy nhiên, không cần phải xác định hàm ở đó. Tại sao không chỉ đơn giản là:

function lol() { 
    alert("lol"); 
} 

$(function() { 
    lol(); //works 
}); 

function dostuff(url) { 
    lol(); // also works 
} 

Bạn thể xác định các chức năng trên toàn cầu như thế này:

$(function() { 
    lol = function() { 
    alert("lol"); 
    }; 
}); 
$(function() { 
    lol(); 
}); 

đó làm việc nhưng không được khuyến khích. Nếu bạn định xác định một cái gì đó trong không gian tên chung, bạn nên sử dụng phương thức đầu tiên.

+1

Tôi nghĩ rằng khi cố gắng xác định chức năng toàn cầu từ bên trong ví dụ thứ hai, để tránh sự mơ hồ, bạn có thể sử dụng này: 'cửa sổ [ 'lol'] = function () {/ * nội dung của hàm * /}; '. – Tadeck

+0

http://api.jquery.com/ready/ –

+0

verrrrrrrrrrrrrry goooooooooooooood này – ashkufaraz

3

Phiên bản ngắn: bạn không thể, nó nằm ngoài phạm vi. Xác định phương pháp của bạn như thế này vì vậy nó có sẵn:

function lol(){ 
    alert('lol'); 
} 

$(function(){ 
    lol(); 
}); 
0

gì về trường hợp thử nghiệm được cài đặt với jQuery và chúng tôi có noconflicts thiết lập cho jQuery?

jQuery(document).ready(function($){ 
    window.lol = function(){ 
      $.('#funnyThat').html("LOL"); 
    } 
}); 

Bây giờ chúng tôi có thể gọi lol từ mọi nơi nhưng chúng tôi có giới thiệu xung đột với Prototype không?

3

Bạn không cần và điều đó - Nếu một hàm được xác định bên ngoài Document.Ready - nhưng bạn muốn gọi trong đó Document.Ready - đây là cách bạn làm điều đó - những câu trả lời đã dẫn tôi đi sai hướng , không gõ chức năng một lần nữa, chỉ cần tên của hàm.

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

đâu fnGetContent là ở đây:

 function fnGetContent(keyword) { 
      var NewKeyword = keyword.tag; 
      var type = keyword.type; 
      $.ajax({ ....... 
+3

Điều này trả lời sự ngược lại của câu hỏi thực tế, nhưng không giảm xuống vì nó vẫn có phần hữu ích cho những người tìm kiếm nó. – Michael

+0

Tôi đã bỏ phiếu vì nó không trả lời câu hỏi – bonez

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