是否有可能来听一个基本事件的所有事件,如果事件是命名空间?jQuery的:绑定命名空间的事件
例子:
$elmt.bind("change", function (event) {
console.log(event);
});
$elmt.trigger("change.namespace1");
$elmt.trigger("change.namespace2");
这只能如果我绑定到完整的活动名称,但是这是不知道在这个位置:(
是否有可能来听一个基本事件的所有事件,如果事件是命名空间?jQuery的:绑定命名空间的事件
例子:
$elmt.bind("change", function (event) {
console.log(event);
});
$elmt.trigger("change.namespace1");
$elmt.trigger("change.namespace2");
这只能如果我绑定到完整的活动名称,但是这是不知道在这个位置:(
你我可以,但它并不完美。
,例如:
function eventHandler(event){
$("#output").html($("#output").html() + "<br />" + event);
}
$elmt = $("#elmt");
$elmt.bind("change.namespace1", eventHandler);
$elmt.bind("change.namespace2", eventHandler);
$elmt.trigger("change.namespace1");
$elmt.trigger("change.namespace2");
你需要从事件中提取命名空间和上,虽然切换,既命名空间为基本的“改变”事件几乎意味着你需要使用“唯一”的命名空间,或者没有命名空间解雇。
我希望这有助于一点。
交叉张贴从Bind to all namespaces of custom jquery event
尝试triggerAll
,而不是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);
诚然,由于jQuery的如何处理触发命名空间,引发了 “根” 事件实际上触发了命名空间的版本,因此要获得你期望你需要使用另一个字符分隔符,像/
,然后声明您的活动像什么:
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], '/');
});
这是我用来比较各种li元素上现有的主题,并与新的自定义主题更换.....
$('li').each(function(index) {
var oT = $(this).attr('data-theme');
var li_item = $(this).attr(index);
$('#li_item ').mousedown(function() {
if(oT=='a')
{
$(this).removeClass('ui-btn-up-' + a').addClass('ui-btn-up-' + 'c').attr('data-theme', 'c');
}
});
$('#li_item ').mouseup(function() {
if(oT=='c')
{
$(this).removeClass('ui-btn-up-' + 'c').addClass('ui-btn-up-' + 'a').attr('data-theme', 'a');
}
});
});
究竟是你想怎么办? – Evan 2012-04-16 15:41:52
一个jQuery插件触发命名空间变化事件(change.channel,change.selected等)。如果其中一个变更事件已经触发,我想要采取行动。我不会硬编码所有可能的命名空间。 – 2012-04-16 15:47:45
在你的问题就来了,我张贴[矿]后(http://stackoverflow.com/questions/12590231/bind-to-all-namespaces-of-custom-jquery-event)。我也想知道这是可能的。 – jschr 2012-09-25 20:04:57