Cross-đăng tải từ Bind to all namespaces of custom jquery event
Hãy thử triggerAll
thay vì trigger
:
(function($) {
$.fn.triggerAll = function(topics, data, delimiter) {
return this.each(function() {
var $this = $(this), chain = [], t = '';
delimiter = (delimiter || '.');
// rebuild chain
$.each(topics.split(delimiter), function(i,n) {
t += (i == 0 ? '' : delimiter) + n;
chain.push(t);
});
// append/prepend original topic?
data = (data || []);
data.push(topics);
$.each(chain, function(i,t) {
$this.trigger(t, data);
});
});
};
})(jQuery);
Cấp, do cách xử lý jQuery kích hoạt không gian tên, kích hoạt các "gốc" sự kiện thực sự bắn các phiên bản namespaced , để có được những gì bạn mong đợi, bạn cần sử dụng một ký tự khác cho dấu phân cách, như /
và sau đó khai báo các sự kiện của bạn như:
var $o = $('#whatever');
// this will be triggered for all events starting with 'root'
$o.on('root', function() { console.log(Array.prototype.slice.call(arguments, 0)); });
// some arbitrary way to fire custom events
$o.on('click', function() {
$o.triggerAll('root/custom1/subA', ['1st', '2nd'], '/');
$o.triggerAll('root/custom2', [3, 4, 5], '/');
});
chính xác bạn đang cố gắng làm gì? – Evan
Trình cắm thêm jquery kích hoạt các sự kiện thay đổi không gian tên (change.channel, change.selected và các sự kiện khác). Tôi muốn thực hiện một hành động nếu một trong những sự kiện thay đổi đã được kích hoạt. Tôi không wont để mã cứng tất cả các không gian tên có thể. –
Chỉ cần xem qua câu hỏi của bạn sau khi tôi đăng [mỏ] (http://stackoverflow.com/questions/12590231/bind-to-all-namespaces-of-custom-jquery-event). Tôi cũng muốn biết nếu điều này là có thể. – jschr