成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導(dǎo)航首頁(yè) ? 技術(shù)教程 ? 實(shí)例講解jQuery中對(duì)事件的命名空間的運(yùn)用
全站頭部文字 我要出現(xiàn)在這里
實(shí)例講解jQuery中對(duì)事件的命名空間的運(yùn)用 669 2024-03-03   

用 jQuery 綁定和解綁事件監(jiān)聽(tīng)器都是非常簡(jiǎn)單的。但是當(dāng)你為一個(gè)元素的一個(gè)事件綁定了多個(gè)監(jiān)聽(tīng)器時(shí),怎樣精確地解綁其中一個(gè)監(jiān)聽(tīng)器?我們需要了解一下事件的命名空間。

看下面這段代碼:

$(“#element”)
  .on(“click”, doSomething)
  .on(“click”, doSomethingElse);

像上面這樣綁定事件監(jiān)聽(tīng)器,當(dāng)元素被點(diǎn)擊時(shí),doSomething 和 doSomethingElse 這兩個(gè)監(jiān)聽(tīng)器都會(huì)被觸發(fā)。這是使用 jQuery 的一個(gè)便利之處,可以隨時(shí)給元素的同一個(gè)事件添加不同的監(jiān)聽(tīng)器。不像用 onclick 那樣,新的監(jiān)聽(tīng)器會(huì)覆蓋舊的。

如果你想解綁其中一個(gè)監(jiān)聽(tīng)器,比如 doSomething,怎么做呢?

是這樣嗎?

$(“#element”).off(“click”);

注意!上面這行代碼會(huì)把元素的 click 事件的所有監(jiān)聽(tīng)器全部解綁,而這并不是我們要的結(jié)果。

幸運(yùn)的是 jQuery 的 .off() 方法可以接受第二個(gè)參數(shù),就像 .on() 一樣。只要把監(jiān)聽(tīng)器函數(shù)的名字作為第二個(gè)參數(shù)傳入 .off() 方法,就能夠解綁指定的監(jiān)聽(tīng)器。

$(“#element”).off(“click”, doSomething);

但是如果你不知道這個(gè)函數(shù)的名字,或者你用的是匿名函數(shù):

$(“#element”)
  .on(“click”, function() {
    console.log(“doSomething”);
  });

怎樣才能精確地解綁某一個(gè) click 事件監(jiān)聽(tīng)器呢?該了解一下 jQuery 的事件命名空間了!

先上代碼:

$(“#element”)
  .on(“click.myNamespace”, function() {
    console.log(“doSomething”);
  });

這里不只是把 click 事件作為參數(shù)傳入 .on() 方法,而是給 click 事件指定了一個(gè)命名空間,然后監(jiān)聽(tīng)了這個(gè)命名空間里的 click 事件。此時(shí),即使監(jiān)聽(tīng)器是匿名函數(shù),實(shí)際上它也是“有名”的了?,F(xiàn)在你可以像下面這樣解綁某一個(gè)具體的命名空間里的事件監(jiān)聽(tīng)器了。

$(“#element”).off(“click.myNamespace”);

這是 jQuery 為我們提供的又一個(gè)方便而強(qiáng)大的功能,它的內(nèi)部實(shí)現(xiàn)肯定很有意思!

我們?cè)賮?lái)看一些代碼:

$(“#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(){});

當(dāng)然,我們也可以用bind進(jìn)行事件綁定。我們看到上面的代碼,我們可以在事件后面,以點(diǎn)號(hào),加我們的名字,就是事件命名空間。所謂事件命名空間,就是事件類(lèi)型后面以點(diǎn)語(yǔ)法附加一個(gè)別名,以便引用事件,如”click.a”,其中”a”就是click當(dāng)前事件類(lèi)型的別名,即事件命名空間。

假如我們要?jiǎng)h除如下命名空間:

$(“#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的父級(jí),因此.a下面的都會(huì)刪掉】
$(“#haorooms”).off("click");//直接解綁click,下面的命名空間都會(huì)刪除。

要注意的是:

假如我們寫(xiě)了如下代碼:

$(“#haorooms”).on("click",function(){});
$(“#haorooms”).on("click.a",function(){});
$(“#haorooms”).on("click.a.bb",function(){});

那么我們要用trigger觸發(fā)click事件,也就是觸發(fā)第一個(gè),豈不是把click.a和click.a.bb都觸發(fā)了,那如何解決這個(gè)問(wèn)題呢,我只想觸發(fā)click,而不觸發(fā)click.a及以下的命名空間?

沒(méi)關(guān)系! 有如下解決辦法:

如果事件類(lèi)型后面附加感嘆號(hào),則表示觸發(fā)不包含命名空間的特定事件類(lèi)型。

假如我們只想觸發(fā)click,可以這么寫(xiě):

$(“#haorooms”).trigger("click!")

只觸發(fā)bb,可以這么寫(xiě):

$(“#haorooms”).trigger("click.a.bb");

有了命名空間,可以方便我們?cè)谕粋€(gè)事件上面做管理啦?。?!



主站蜘蛛池模板: 送教上门工作情况记录表| 春风沉醉的夜晚电影| 消防给水及消火栓技术规范gb50974-2014| 时来运转电影| 女公安毛片免费观看| 九九九九九九伊人| 九龙城寨在线观看| 电影壮志凌云女版满天星法版在线看| 世界赋予我的 二声部合唱谱| 大侠霍元甲演员表| 最新好看电影| 有档期是有空还是没空| 浙江卫视节目表电视猫| 念念相忘电影免费观看| 陕09j01图集| 日本电影纯爱| 阮经天新电影| 第三套广播体操七彩阳光完整版视频| 假如爱有天意| 来去四字成语| 疯狂48小时| 小学生数独入门100题| 高志鹏| 遥远星际| cctv17节目表今天| 电影《uhaw》免费观看| 不回微信判30年图片| 陈宛蔚| 坚强的理由吉他谱| 李截| 把乐带回家| 七年级地理课时练电子版 | 362329| 水管十大品牌排行榜前十名| 艳妇乳肉豪妇荡乳xxx| 虐猫视频哪里可以看| 性的视频| 以家人之名小说原著| 团结就是力量歌词电子版| 金马电影网| 跟班服务|

?。?!站長(zhǎng)長(zhǎng)期在線接!??!

網(wǎng)站、小程序:定制開(kāi)發(fā)/二次開(kāi)發(fā)/仿制開(kāi)發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長(zhǎng)微信:lxwl520520

站長(zhǎng)QQ:1737366103