我們先看一些代碼:
$(“#haorooms”).on("click.a",function(){});
$(“#haorooms”).on("click.a.bb",function(){});
$(“#haorooms”).on("dbclick.a",function(){});
$(“#haorooms”).on("mouseover.a",function(){});
$(“#haorooms”).on("mouseout.a",function(){});
當然,我們也可以用bind進行事件綁定。我們看到上面的代碼,我們可以在事件后面,以點號,加我們的名字,就是事件命名空間。所謂事件命名空間,就是事件類型后面以點語法附加一個別名,以便引用事件,如”click.a”,其中”a”就是click當前事件類型的別名,即事件命名空間。
假如我們要刪除如下命名空間:
$(“#haorooms”).on("click.a.bb",function(){});
我們可以用:
$(“#haorooms”).off("click.a.bb");//直接刪除bb命名空間 【推薦】
$(“#haorooms”).off(".bb"); //直接刪除bb命名空間 【推薦】
$(“#haorooms”).off(".a"); //刪除.a命名空間下面所有的子空間【包括.a.bb .a.cc等等,.a是.bb的父級,因此.a下面的都會刪掉】
$(“#haorooms”).off("click");//直接解綁click,下面的命名空間都會刪除。
要注意的是:
假如我們寫了如下代碼:
$(“#haorooms”).on("click",function(){});
$(“#haorooms”).on("click.a",function(){});
$(“#haorooms”).on("click.a.bb",function(){});
那么我們要用trigger觸發click事件,也就是觸發第一個,豈不是把click.a和click.a.bb都觸發了,那如何解決這個問題呢,我只想觸發click,而不觸發click.a及以下的命名空間?
沒關系! 有如下解決辦法:
如果事件類型后面附加感嘆號,則表示觸發不包含命名空間的特定事件類型。
假如我們只想觸發click,可以這么寫:
$(“#haorooms”).trigger("click!")
只觸發bb,可以這么寫:
$(“#haorooms”).trigger("click.a.bb");
有了命名空間,可以方便我們在同一個事件上面做管理啦!!!
自定義事件
我在這里就不多描述了!所有自定義事件都可以通過jQuery方法觸發,例如下面的示例自定一個Delay事件類型,并把它綁定到input元素對象上,然后在按鈕單擊事件中觸發自定義事件。
$("input").bind("delay",function(event){
setTimeout(function(){
alert(event.type);
},1000);
});
$("input").click(function(){
$("input").trigger("delay"); //觸發自定義事件
});
自定義事件不是真正意義上的事件,可以把它理解為自定義函數,觸發自定義事件就相當于調用自定義函數。
原文鏈接http://www.haorooms.com/post/jquery_namespaces_eventname