自定义命名空间事件将不起作用

时间:2012-03-12 08:58:54

标签: jquery

我试图让自定义命名空间事件按照此处的说明运行:http://docs.jquery.com/Namespaced_Events

但我必须遗漏一些东西,因为除非命名空间完全匹配,否则我无法触发事件。

我创建了一个演示问题的小提琴:http://jsfiddle.net/PsR6x/1/

我做错了什么?

更新

在jQuery v1.3.2&中调用第二个绑定。 v1.5.2但不在v1.6.4及以上。 在任何版本中都不会调用第三个绑定。

on代替bind也不起作用。

1 个答案:

答案 0 :(得分:5)

事件命名空间不是层次结构 使用您拥有的代码,$('#someid').trigger('griffin.model');会触发所有代码,$('#someid').trigger('griffin.updated');会触发所有代码。

$('body').bind('griffin.model.updated.user', function() {
    alert('Exact namespace = trigger');
});
$('body').bind('griffin.model.updated', function() {
    alert('Will not trigger :(');
});
$('#someid').bind('griffin.model.updated', function() {
    alert('Same item, but not the same namespace = wont trigger');
});

这里你基本上为第一个创建了三个独立的命名空间,为第二个和第三个创建了两个独立的命名空间。

仔细查看this example并阅读我留给您的评论。尝试许多不同的事情有时很有用,看看你可以做的不同事情。

关于on()不工作:
该片段直接取自jquery-1.7.1.js:

bind: function( types, data, fn ) {
    return this.on( types, null, data, fn );
}

正如您所看到的,bind()只是on()的包装器,并且应该完全相同,但bind()不支持选择器或委派。