2013-04-04 40 views
8

Làm thế nào để gọi một chức năng sau khi change() sự kiện hoàn tất?jquery sự kiện thay đổi gọi lại

ví dụ, một cái gì đó như thế này: (Tôi biết jQuery Không có phương pháp gọi lại như mặc định)

$('#element').change(function(){ 
        // do something on change 
        // $('#milestonesSelect').multiselect({ minWidth: 120 , height : '200px' ,selectedList: 4 }).multiselectfilter(); 
         // some animation calls ... 
         // ... 
        }, function(){ 
        // do something after complete 
         alert('another codes has completed when i called'); 
        } 
        ); 

Có thể gọi một callback đơn sau khi tất cả các mã trên phương pháp thay đổi được thực hiện, trừ trường hợp cuộc gọi một cuộc gọi lại hoàn chỉnh cho mọi chức năng trên đó?

Tôi cần phải làm điều gì đó sau khi sự kiện thay đổi đã hoàn thành

Tôi có cần đặt thứ tự phương pháp trong trình xử lý thay đổi không?

+0

Chỉ cần chạy mã của bạn bên trong đó sự kiện thay đổi. Không cần gọi lại. – elclanrs

+1

Bằng cách 'làm điều gì đó sau khi hoàn thành', bạn có nghĩa là khi chức năng đầu tiên kết thúc, hoặc sau khi sự kiện 'thay đổi' đã hoàn thành? –

+0

sau khi sự kiện thay đổi đã hoàn thành – Alireza41

Trả lời

9

Bạn có thể tận dụng các event bubbling và đăng ký một callback trong document.

$(document).on('change', '#element', function(){ 
    console.log('after all callbacks') 
}); 

Demo: Fiddle

+3

Và nếu các sự kiện của bạn đã được kích hoạt theo cách này thì sao? I E. 'jQuery ('# myelement'). on ('change', 'select, input', function() {... do stuff});' Bạn sẽ đính kèm một cuộc gọi lại sau khi những thay đổi này được kích hoạt như thế nào? – pspahn

+0

liên kết bubbling sự kiện không hoạt động trong câu trả lời của bạn. Vui lòng cập nhật để sử dụng sau. – vivek

0

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, điều này sẽ thực thi mã chỉ có một thời gian sau khi một sự kiện thay đổi là bắn:

var changed = false; 

$('#element').on('change', function() { 
    if (!changed) { 
     // do something on change 
     changed = true; 
    } 
    } 
}); 
+0

như bạn đã nói 'điều này sẽ thực thi mã chỉ một lần sau khi sự kiện thay đổi được kích hoạt' nhưng tôi cần phải làm điều gì đó sau khi sự kiện hoàn thành không được kích hoạt. Tôi không muốn làm điều đó cùng một lúc với một vụ kiện khác – Alireza41

2

tôi chỉ cần bỏ ra một chút thời gian khám phá này bản thân mình, và quyết định gửi câu trả lời của tôi cho câu hỏi này là tốt. Điều này không sử dụng bất kỳ phương thức trì hoãn nào của jQuery, mà có thể là một cách tiếp cận tốt hơn. Tôi đã không khám phá họ đủ để có một ý kiến ​​về vấn đề này.

$("#element").change(function() { 
    handler().after(callBack($("#element").val())); 
} 

function handler() { 
    alert("Event handler"); 
} 

function callBack(foo) { 
    alert(foo); 
} 

Demo: JSFiddle

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