2011-10-23 44 views
9

Tôi có chức năng tùy chỉnh và tôi muốn thêm chức năng gọi lại vào nó, tôi đã xem qua các câu hỏi khác nhưng tôi không thể tìm ra câu trả lời cho vấn đề của mình. Vì vậy, về cơ bản nó trông như thế này:Jquery gọi hàm gọi lại trong chức năng tùy chỉnh

function myfunction() { 
// something 
} 

Và tôi có một chức năng khác nhau mà tôi muốn kích hoạt như một callback, cuối cùng tôi muốn gọi myfunction như thế này:

myfunction(callback()); 

Vì vậy, có thể bất cứ ai xin vui lòng cho cách của tôi để làm điều này?

Trả lời

20

Bạn sẽ gọi nó như thế này (đi qua các hàm callback như một tham số):

myfunction(myCallbackFn); 

Chú ý rằng không có dấu ngoặc đơn sau tên hàm khi đi qua một tham chiếu đến các chức năng như một cuộc tranh cãi. Điều này không gọi hàm, nhưng chỉ chuyển một tham chiếu tới hàm đó, sau đó nó có thể được gọi sau này từ bên trong hàm tùy chỉnh của bạn.

Bạn sẽ xác định chức năng của bạn và sau đó gọi hàm callback trong nó như thế này:

function myfunction(cb) { 
    cb(arg1, arg2); 
} 

Lưu ý, có rất nhiều phương pháp thực sự gọi hàm callback từ bên trong chức năng tùy chỉnh của bạn. Nếu bạn chỉ cần gọi nó là bình thường và không quan tâm đến đối số this, bạn chỉ có thể sử dụng:

cb(); 

Nếu bạn muốn thiết lập các this luận một cái gì đó, bạn có thể sử dụng này:

cb.call(thisArg, arg1, arg2); 

Nếu bạn muốn vượt qua cùng tranh luận hiện tại của bạn hoặc vượt qua một mảng các đối số và thiết lập các tham số this, bạn sẽ sử dụng này:

cb.apply(thisArg, argArray); 

Tài liệu tham khảo trên .call().apply().


mã hiện tại của bạn có một lỗi javascript trong lĩnh vực này:

test(rand_gyumolcs, link, callback){ 
    callback(); 
}; 

Đây không phải là javascript pháp lý. Tôi không biết những gì bạn đang cố gắng làm, nhưng điều này trông giống như một nửa của một tuyên bố chức năng và một nửa của một cuộc gọi chức năng. Nếu bạn chỉ muốn gọi hàm thử nghiệm, bạn sẽ chỉ sử dụng chức năng này:

test(rand_gyumolcs, link, callback); 

Bên trong kiểm tra, nếu bạn muốn hàm gọi lại được gọi sau khi hoạt ảnh hoàn tất, bạn sẽ phải móc hoàn thành chức năng của hoạt ảnh và gọi lại cuộc gọi lại.

+0

Dường như không làm việc cho tôi jfriend00 ... nó có lẽ là sai lầm của tôi, nhưng bạn có thể có một cái nhìn? Các mã là một chút lộn xộn tôi biết, tôi không phải là tốt tại jquery ... http://ridewithus.co.cc/test/ –

+0

nếu bạn có thể nhìn thấy .. tôi muốn các loại trái cây ở phía bên phải để di chuyển, và chức năng kiểm tra thực hiện điều đó, nhưng tôi cũng có chức năng gọi lại sẽ chuyển chúng trở lại vị trí ban đầu của chúng –

+0

Vui lòng đăng mã có liên quan trong câu hỏi ban đầu của bạn hoặc đưa ra mô tả rất cụ thể về vị trí mã trong trang của bạn và cách kích hoạt nó. Bạn đã đăng một trang web có năm trang tập lệnh được nhúng và tôi không biết bạn đang yêu cầu đoạn mã nào. – jfriend00

4

thông báo Tôi không gọi hàm gọi lại mà chỉ chuyển nó làm hàm tham chiếu đến hàm của tôi. Sau đó tôi gọi nó vào hàm ở cuối hoặc bất cứ nơi nào bạn muốn.

+1

@Keith ... Bạn cần phải vượt qua chức năng thực tế mà bạn cần phải chạy khi bạn khai báo myfunction: tức là myfunction (function() {alert "hello";}); không phải chức năng (gọi lại); – bouk

7

Dưới đây là một ví dụ với một callback với một giá trị trả về đó là cũng dùng các thông số đầu vào:

function test2(arg1, arg2, callback) { 
    var result = callback(arg1, arg2); 

    alert('arg1=' + arg1 + ', arg2=' + arg2 + ', result=' + result); 
} 

test2(1, 2, function(a, b) { return a + b; }); 
Các vấn đề liên quan