2012-03-12 72 views
3

我試圖讓自定義命名空間事件來這裏描述的工作:http://docs.jquery.com/Namespaced_Events自定義命名空間的事件將無法工作

但我必須失去了一些東西,因爲我不能讓事件觸發,除非命名空間完全匹配。

我創建了一個小提琴來演示該問題:http://jsfiddle.net/PsR6x/1/

我在做什麼錯?

更新

第二綁定在jQuery的v1.3.2調用& v1.5.2但不是在v1.6.4及以上。 第三個綁定不會在任何版本中調用。

on而不是bind也不起作用。

回答

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()不支持選擇器或委派。

+0

感謝您的幫助! – 2013-10-02 01:55:01

+0

不客氣:) – Shea 2013-10-02 02:44:47