jQuery:绑定名称空间事件
如果事件是命名空间,是否可以侦听一个基本事件的所有事件 例如:jQuery:绑定名称空间事件,jquery,Jquery,如果事件是命名空间,是否可以侦听一个基本事件的所有事件 例如: $elmt.bind("change", function (event) { console.log(event); }); $elmt.trigger("change.namespace1"); $elmt.trigger("change.namespace2"); 只有当我绑定到完整的事件名称时,这才有效,但这是我在这个位置上不知道的:(你可以,但这并不完美 例如: function eventHandler(eve
$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");
函数eventHandler(事件){
$(“#输出”).html($(“#输出”).html()+“
”+事件);
}
$elmt=$(“#elmt”);
$elmt.bind(“change.namespace1”,eventHandler);
$elmt.bind(“change.namespace2”,eventHandler);
$elmt.trigger(“change.namespace1”);
$elmt.trigger(“change.namespace2”);
您需要从事件中提取名称空间并打开它,因为两个名称空间都是为基本的“更改”事件触发的,这几乎意味着您需要使用“仅”名称空间,或者不使用名称空间
我希望这能有所帮助。从
尝试
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处理触发名称空间的方式,触发“root”事件实际上会触发名称空间版本,因此要获得预期的结果,需要使用另一个字符作为分隔符,如/
,然后声明事件,如:
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');
}
});
})) 您到底想做什么?jquery插件会触发名称空间的更改事件(change.channel、change.selected和其他)。如果触发了某个更改事件,我想执行一个操作。我不会硬编码所有可能的名称空间。只是在我发布后遇到了你的问题。我也想知道这是否可行。