2012-01-27 27 views
5

Tôi đã có một datepicker với một xử lý sự kiện onSelect. Sau đó trong chương trình của tôi, tôi muốn thêm các trình xử lý onSelect khác. Vấn đề là, họ quét sạch cái đầu tiên. (Fiddle.)Làm thế nào để thêm các trình xử lý sự kiện bổ sung vào một cá thể datepicker jquery-ui?

Làm cách nào để thêm trình xử lý bổ sung mà không thực hiện điều đó?

+1

Có vẻ điều này đã được hỏi trước: http://stackoverflow.com/q/2241725/1030169 – jmoerdyk

+0

Tôi nghĩ rằng nó sẽ được, nhưng không tìm thấy nó, cảm ơn. – sprugman

Trả lời

1

Bạn có thể duy trì các cuộc gọi mong muốn trong một mảng;

var firstHandler = function(dateText, inst) { 
    console.log('Original Handler', dateText, inst); 
}; 

var secondHandler = function(dateText, inst) { 
    console.log('Second Handler', dateText, inst); 
}; 

$('#datepicker').datepicker({ 
    onSelect: function() { 
     var sinks = $(this).data("mySelects"); 
     for (var i = 0; i < sinks.length; i++) 
      sinks[i].apply(this, arguments); 
    } 
}).data("mySelects", [firstHandler]); 

$('#addBtn').click(function(event) { 
    $('#datepicker').data('mySelects').push(secondHandler); 
    $('#datepicker').data('mySelects').push(nthHandler); 
}); 
+0

Cảm ơn. Tôi vừa mới viết xong khi tôi thấy bình luận ở trên. Tôi nghĩ rằng các giải pháp được liên kết là một chút thanh lịch hơn. Cập nhật: thực sự, phiên bản của bạn thanh lịch hơn tôi. Hmm ... – sprugman

+0

Giải pháp này hoạt động tốt trong một số trường hợp (thay vì giải pháp được liên kết không hoạt động nếu trong trình xử lý đầu tiên, có một biến đến từ ngữ cảnh của trình xử lý đầu tiên). Tôi có thể tìm tài liệu giải thích cho tôi giải pháp ở đâu? Tôi không thể hiểu, ví dụ, biến đối số. –

+0

'.apply (this, argument)' gọi hàm trong 'sinks []' đảm bảo rằng 'this' là đúng trong trình xử lý. Nó cũng truyền đối tượng 'arguments' để truyền tất cả các đối số mà' onSelect' ban đầu nhận được ('dateText' &' inst'). https: // developer.mozilla.org/vi/JavaScript/Tham chiếu/Hàm_and_function_scope/đối số' –

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