Trasy wpis z Bind to all namespaces of custom jquery event
Spróbuj triggerAll
zamiast 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);
prawda, ze względu na to, jak jQuery obsługuje wyzwalanie przestrzeni nazw, wyzwalając "root" zdarzenie rzeczywiście wyzwala przestrzeni nazw wersje , więc aby uzyskać to, czego się spodziewasz, musisz użyć innego znaku do separatora, na przykład /
, a następnie zadeklaruj swoje wydarzenia, takie jak:
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], '/');
});
co dokładnie próbujesz zrobić? – Evan
Wtyczka jquery wyzwala zdarzenia związane ze zmianą wielkości liter (change.channel, change.selected i inne). Chciałbym wykonać akcję, jeśli zostanie wywołane jedno ze zdarzeń zmiany. Nie chcę sztywnego kodowania wszystkich możliwych przestrzeni nazw. –
Właśnie natknąłem się na twoje pytanie po tym, jak opublikowałem [moje] (http://stackoverflow.com/questions/12590231/bind-to-all-namespaces-of-custom-jquery-event). Chciałbym również wiedzieć, czy to jest możliwe. – jschr