最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jQuery中綁定事件的命名空間詳解

 更新時(shí)間:2011年04月05日 23:23:54   作者:  
jQuery的bind的函數(shù)在實(shí)際應(yīng)用其實(shí)不是特別多,只是他可以綁定一個(gè)事件,但不會(huì)即時(shí)觸發(fā),也可以通過(guò)unbind來(lái)解除綁定。
在沒(méi)有看到這篇 文章之前,我一直不知道原來(lái)bind也可以有命名空間。事實(shí)上,我看完這篇文章后,再去翻了一下手冊(cè),也才發(fā)現(xiàn)了一點(diǎn)點(diǎn)的注釋。但手冊(cè)也僅僅是一句話就帶 過(guò)去了。沒(méi)有過(guò)多的深究,或許他認(rèn)為命名空間這玩意很簡(jiǎn)單,沒(méi)有必要多解釋?

先看手冊(cè),由于bind方法有三個(gè)參數(shù)(type,[data],fn),所以手冊(cè)上這么介紹:

.bind() 方法是用于往文檔上附加行為的主要方式。所有JavaScript事件對(duì)象, 比如focus, mouseover, 和 resize,都是可以作為type參數(shù)傳遞進(jìn)來(lái)的。

jQuery還提供了一些綁定這些標(biāo)準(zhǔn)事件類型的簡(jiǎn)單方式,比如.click()用于簡(jiǎn) 化.bind('click')。一共有以下這 些:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error 。

任何作為type參數(shù)的字符串都是合法的;如果一個(gè)字符串不是原生的JavaScript事件名, 那么這個(gè)事件處理函數(shù)會(huì)綁定到一個(gè)自定義事件上。這些自定義事件絕對(duì)不會(huì)由瀏覽器觸發(fā),但可以通過(guò)使用.trigger()或 者.triggerHandler()在其他代碼中手動(dòng)觸發(fā)。

如果type參數(shù)的字符串中包含一個(gè)點(diǎn)(.)字符, 那么這個(gè)事件就看做是有命名空間的了。這個(gè)點(diǎn)字符就用來(lái)分隔事件和他的命名空間。舉例來(lái)說(shuō),如果執(zhí) 行 .bind('click.name', handler) ,那么字符串中的 click 是事件類型,而字符串 name 就是命名空間。命名空 間允許我們?nèi)∠壎ɑ蛘哂|發(fā)一些特定類型的事件,而不用觸發(fā)別的事件。參考unbind()來(lái)獲取更多信息。

當(dāng)一個(gè)事件傳到一個(gè)元素上,所有綁定在上面的針對(duì)哪個(gè)事件的處理函數(shù)都會(huì)觸發(fā)。如果注冊(cè)了多個(gè)事件 處理函數(shù),總是按照綁定的順序依次觸發(fā)。當(dāng)所有綁定的事件處理函數(shù)執(zhí)行完畢后,事件繼續(xù)沿著普通的事件冒泡途徑上浮。



jQuery的 bind / unbind 方法應(yīng)該說(shuō)使用很簡(jiǎn)單,而且大多數(shù)時(shí)候 可能并不會(huì)用到,取而代之的是直接用 click / keydown 之類的事件名風(fēng)格的方法來(lái)做事件綁定操作。

但假設(shè)如下情況:需要在運(yùn)行時(shí)根據(jù)用戶交互的結(jié)果進(jìn)行不同click事件處理邏輯的綁定,因而理論 上會(huì)無(wú)數(shù)次對(duì)某一個(gè)事件進(jìn)行 bind / unbind 操作。但又希望 unbind 的時(shí)候只把自己綁上去的處理邏輯給釋放掉而不是所有其他地方有 可能的額外的同一事件綁定邏輯。

這時(shí)候如果直接用 .click() / .bind('click') 加 上 .unbind('click') 來(lái)進(jìn)行重復(fù)綁定的話,被 unbind 掉的將是所有綁定在元素上的 click 處理邏輯,潛在會(huì)影響到該元素 其他第三方的行為。當(dāng)然如果在bind的時(shí)候是顯示定義了function變量的話,可以在unbind的時(shí)候提供 function作為第二個(gè)參數(shù)來(lái)指 定只unbind其中一個(gè)處理邏輯,但實(shí)際應(yīng)用中很可能會(huì)碰到各種進(jìn)行匿名函數(shù)綁定的情況。

對(duì)于這種問(wèn)題,jQuery的解決方案是使用事件綁定的命名空間。即在事件名稱后添 加 .something 來(lái)區(qū)分自己這部分行為邏輯范圍。

比如 用 .bind('click.myCustomRoutine',function(){...}); 同樣是把匿名函數(shù)綁定到 click 事件(你 可以用自己的命名空間多次綁定不同的行為方法上去),當(dāng)unbind的時(shí)候用 .unbind('click.myCustomRoutine') 即可 釋放所有綁定到 .myCustomRoutine 命名空間的 click 事件,而不會(huì)解除其他通過(guò) .bind('click') 或另外的命名 空間所綁定的事件行為。

同時(shí),使用命令空間還可以讓你一次性 unbind 所有此命名空間下的自定義事件綁定,通 過(guò) .unbind('.myCustomRoutine') 即可。

要注意的是,jQuery的命名空間并不支持多級(jí)空間。因?yàn)樵趈Query里面,如果 用 .unbind('click.myCustomRoutine.myCustomSubone') ,解除的是命名空間分別 為 myCustomRoutine 和 myCustomSubone 的兩個(gè)并列命名空間下的所有 click 事件,而不 是 "myCustomRoutine 下的 myCustomSubone 子空間"。

jQuery的 bind / unbind 方法應(yīng)該說(shuō)使用很簡(jiǎn)單,而且大多數(shù)時(shí)候可能并不會(huì)用到,取而代之的是直接用 click / keydown 之類的事件名風(fēng)格的方法來(lái)做事件綁定操作。

但假設(shè)如下情況:需要在運(yùn)行時(shí)根據(jù)用戶交互的結(jié)果進(jìn)行不同click事件處理邏輯的綁定,因而理論上會(huì)無(wú)數(shù)次對(duì)某一個(gè)事件進(jìn)行 bind / unbind 操作。但又希望 unbind 的時(shí)候只把自己綁上去的處理邏輯給釋放掉而不是所有其他地方有可能的額外的同一事件綁定邏輯。

這時(shí)候如果直接用 .click() / .bind('click') 加上 .unbind('click') 來(lái)進(jìn)行重復(fù)綁定的話,被 unbind 掉的將是所有綁定在元素上的 click 處理邏輯,潛在會(huì)影響到該元素其他第三方的行為。當(dāng)然如果在bind的時(shí)候是顯示定義了function變量的話,可以在unbind的時(shí)候提供function作為第二個(gè)參數(shù)來(lái)指定只unbind其中一個(gè)處理邏輯,但實(shí)際應(yīng)用中很可能會(huì)碰到各種進(jìn)行匿名函數(shù)綁定的情況。

對(duì)于這種問(wèn)題,jQuery的解決方案是使用事件綁定的命名空間。即在事件名稱后添加 .something 來(lái)區(qū)分自己這部分行為邏輯范圍。

比如用 .bind('click.myCustomRoutine',function(){...}); 同樣是把匿名函數(shù)綁定到 click 事件(你可以用自己的命名空間多次綁定不同的行為方法上去),當(dāng)unbind的時(shí)候用 .unbind('click.myCustomRoutine') 即可釋放所有綁定到 .myCustomRoutine 命名空間的 click 事件,而不會(huì)解除其他通過(guò) .bind('click') 或另外的命名空間所綁定的事件行為。

同時(shí),使用命令空間還可以讓你一次性 unbind 所有此命名空間下的自定義事件綁定,通過(guò) .unbind('.myCustomRoutine') 即可。

要注意的是,jQuery的命名空間并不支持多級(jí)空間。因?yàn)樵趈Query里面,如果用 .unbind('click.myCustomRoutine.myCustomSubone') ,解除的是命名空間分別為 myCustomRoutine 和 myCustomSubone 的兩個(gè)并列命名空間下的所有 click 事件,而不是 "myCustomRoutine 下的 myCustomSubone 子空間"。

相關(guān)文章

最新評(píng)論

卓资县| 沂南县| 乌什县| 刚察县| 丰镇市| 安庆市| 沅陵县| 略阳县| 茶陵县| 广东省| 永新县| 恩平市| 常熟市| 丘北县| 晴隆县| 华池县| 滁州市| 米林县| 德格县| 鹿泉市| 法库县| 桃园县| 什邡市| 堆龙德庆县| 虎林市| 宜都市| 阳原县| 晋州市| 师宗县| 佳木斯市| 平安县| 临高县| 石河子市| 昌乐县| 深圳市| 奎屯市| 阿城市| 武宣县| 成安县| 平陆县| 吴忠市|