2013-07-10 23 views
15

Im cố gắng để gỡ lỗi ứng dụng web của tôi có sử dụng jQuery.

Trong chức năng gọi firebug im bên trong $ (document) .ready ..

function val() { console.log('validated outside doc.ready'); } 
$(document).ready(function() 
{ 

    console.log('document ready...'); 

    function validate() { console.log('validated!'); } 
} 

Trong bảng điều khiển firebug tôi gõ validate() và nó nói nó không phải là một hàm

Nếu tôi nhập val() nó hoạt động tốt.

Làm cách nào để gọi điện xác thực từ bảng điều khiển?

+2

tại sao bạn không đặt hàm xác nhận của bạn bên ngoài hàm document.ready .. vấn đề là hàm của bạn nằm ngoài phạm vi khi nó được gọi là .. – bipen

+0

nó là vì 'validate' là một hàm đóng trong hàm anonymus được chuyển đến' ready' như gọi lại –

Trả lời

45

Bạn không gọi một chức năng như vậy, bạn chỉ cần xác định chức năng.

Cách tiếp cận đúng là xác định các chức năng bên ngoài document.ready và gọi nó bên trong:

// We define the function 
function validate(){ 
    console.log('validated!'); 
} 

$(document).ready(function(){ 
    // we call the function 
    validate(); 
}); 

lựa chọn khác là tự gọi chức năng như thế:

$(document).ready(function(){ 
    // we define and invoke a function 
    (function(){ 
    console.log('validated!'); 
    })(); 
}); 
+0

Vâng, tôi thích cách này, rất sạch sẽ và cảm ơn bạn rất nhiều. Ive chỉ được sử dụng jQuery nghiêm túc trong vài tháng qua vì vậy Im học heaps cổ vũ :) – IEnumerable

6

chức năng validate của bạn là địa phương cho hàm bạn đã chuyển đến trình xử lý jQuery ready.

nếu bạn làm:

window.validate = function(){ /*....*/ }; 

bạn sẽ có thể truy cập từ giao diện điều khiển. Nhưng nó không phải là thực hành tốt để gây ô nhiễm phạm vi toàn cầu, trừ khi nó chỉ để gỡ lỗi.

1

tốt, có lý do gì khiến bạn cần chức năng đó bên trong tài liệu sẵn sàng không? chỉ bên trong các dấu ngoặc đó (phạm vi) hàm sẽ tồn tại. chỉ cần di chuyển nó ra, hoặc tất cả nó chỉ bên trong document.ready