JQuery事件總結(jié)

畢設(shè)要翻譯短論文境输,就網(wǎng)上隨便找了篇讓女朋友翻譯了下阎肝,哈哈纺弊,還不錯(cuò)。沒錯(cuò)铭拧,我就是來(lái)花式秀女友的。格式亂亂的恃锉,明天改

jQuery有很多快捷的方法搀菩,像contextmenu(),hover()和keyup()破托,處理不同的事件肪跋。除了專門的方法,jQuery也提供了一個(gè)通用的方法土砂,它允許你把任何事件的處理程序:在('eventname州既,處理程序)。但是萝映,這些方法只是包裝標(biāo)準(zhǔn)的DOM事件吴叶,你可以在純JavaScript這些事件添加處理程序。
在本教程中序臂,我們將快速看一下所有這些事件的方法蚌卤,它被分為五大類,并討論在與他們合作時(shí)奥秆,最好的做法逊彭。

  1. 瀏覽器事件
    這一類有三個(gè)事件。這些都是錯(cuò)誤构订、調(diào)整和滾動(dòng)侮叮。當(dāng)元素如圖像不正確加載時(shí),該錯(cuò)誤事件被觸發(fā)悼瘾。它的快捷方法已被否決因?yàn)閖Query 1.8版本签赃,所以你現(xiàn)在應(yīng)該使用('error', handler)。
  • resize()事件
    每當(dāng)瀏覽器窗口更改時(shí)分尸,該事件就觸發(fā)锦聊。不同的瀏覽器可以根據(jù)執(zhí)行不同的方式調(diào)用調(diào)整大小處理程序。Internet Explorer和基于WebKit的瀏覽器一直調(diào)用處理程序箩绍,像Opera這樣的瀏覽器只在調(diào)整大小在調(diào)整結(jié)束的時(shí)候.
    這段代碼下面互換基于窗口寬度的圖像源孔庭。

這個(gè)代碼演示展示了在行動(dòng)的事件:

2 滾動(dòng)事件
當(dāng)用戶滾動(dòng)到特定元素中的不同位置時(shí),可以將該事件設(shè)置為一個(gè)元素。除了窗口對(duì)象圆到,一個(gè)滾動(dòng)條的任何元素都可以觸發(fā)此事件怎抛。例如,設(shè)置滾動(dòng)overflow屬性的任何元素芽淡,或任何可滾動(dòng)的iframe马绝,可以解雇這一事件。
但是挣菲,當(dāng)滾動(dòng)位置更改時(shí)富稻,該處理程序被調(diào)用。滾動(dòng)的原因是不相關(guān)的白胀。它可以在按下箭頭鍵觸發(fā)椭赋,點(diǎn)擊或拖動(dòng)滾動(dòng)條或使用鼠標(biāo)滾輪。在下面的代碼中或杠,我們檢查用戶是否已滾動(dòng)下跌超過500px和執(zhí)行一些操作哪怔。

在下面的演示,如果你保持使用滾動(dòng)和接近結(jié)束時(shí)你應(yīng)該看到一個(gè)通知向抢,你幾乎是在網(wǎng)頁(yè)的底部:

3 文檔加載事件
jQuery三事件被解雇了基于文檔或DOM的狀態(tài)的方法认境。這些都是加載,未加載和準(zhǔn)備挟鸠。
load()可以用來(lái)將處理任何元素加載一個(gè)外部資源元暴,如圖片、腳本兄猩、內(nèi)嵌框架和窗口對(duì)象本身茉盏。當(dāng)元素連接到,以及所有的子元素枢冤,已完全加載時(shí)發(fā)生火災(zāi)鸠姨。當(dāng)使用圖像時(shí),它帶來(lái)了一些問題淹真。第一是它不能正確地泡了DOM樹讶迁。二是既不可靠也不跨瀏覽器。
當(dāng)用戶在瀏覽網(wǎng)頁(yè)時(shí)核蘸,卸載事件被觸發(fā)巍糯。這可能發(fā)生,因?yàn)橛脩酎c(diǎn)擊了一個(gè)鏈接客扎,鍵入一個(gè)新的網(wǎng)址地址欄或關(guān)閉瀏覽器窗口祟峦。這一事件也引發(fā)了頁(yè)面刷新。請(qǐng)注意徙鱼,使用preventdefault()不會(huì)取消卸載事件宅楞。此外针姿,電話alert(),confirm()和prompt()會(huì)被大多數(shù)瀏覽器這個(gè)事件處理程序內(nèi)的忽略厌衙,意味著下面的代碼不會(huì)工作:

自從版本1.8后無(wú)論是load()還是unload()都被棄用距淫。
2 準(zhǔn)備活動(dòng)
在大多數(shù)情況下,沒有必要為所有的元素婶希,如圖像加載前一個(gè)腳本可以運(yùn)行沒有任何問題榕暇。你需要確保的是,DOM層次結(jié)構(gòu)已經(jīng)完全構(gòu)造喻杈。準(zhǔn)備活動(dòng)需要照顧這個(gè)為您彤枢。任何處理程序附加到該事件是只運(yùn)行后的DOM就緒。在處理程序可以運(yùn)行你的jQuery代碼或附加事件處理程序的其他元素沒有任何煩惱奕塑。
在荷載作用下的高分辨率圖像CodePen演示堂污。你會(huì)注意到DOM就緒之前加載圖像完全家肯。

如果你的代碼依賴于一些CSS樣式屬性的值龄砰,你應(yīng)該先到相應(yīng)的樣式表提供參考或嵌入式方式運(yùn)行它之前。
3 鍵盤事件
鍵盤事件觸發(fā)可以通過任何用戶和鍵盤交互讨衣。每一個(gè)這樣的事件將有關(guān)于按鍵和事件類型的信息换棚。這三個(gè)鍵盤快捷方式在jQuery -中是keydown(), keyup() and keypress().
the keyup and keydown事件
正如名字所暗示的,KeyUp開火當(dāng)用戶釋放鍵盤和keydown的關(guān)鍵是發(fā)射時(shí)反镇,用戶按下鍵盤上的鍵固蚤。這兩個(gè)事件的處理程序都可以連接到任何元素,但只有在當(dāng)前有焦點(diǎn)的元素上的處理程序才被觸發(fā)歹茶。
建議使用該事件對(duì)象的屬性來(lái)確定被按下的鍵夕玩。這是因?yàn)闉g覽器使用不同的屬性來(lái)存儲(chǔ)這些信息并將其財(cái)產(chǎn)jQuery可靠地檢索此信息。
更值得一提的是惊豺,這兩個(gè)事件在后一種情況下都沒有區(qū)別燎孟,兩個(gè)移動(dòng)和一個(gè)分別是單獨(dú)注冊(cè)的。在下面的代碼中尸昧,目前的用戶一個(gè)警告框揩页,其中登記任何KeyDown事件。當(dāng)Y鍵被按下烹俗,一個(gè)特定的元素從DOM爆侣。

按鍵事件
這一事件就像KeyDown事件。一個(gè)主要的區(qū)別是幢妄,改性劑和非打印鍵像shift兔仰,ESC等不火KeyPress事件。我不能強(qiáng)調(diào)這一點(diǎn)時(shí)蕉鸳,我說斋陪,你不應(yīng)該使用KeyPress事件捕捉特殊按鍵像箭頭鍵。按鍵是用于當(dāng)你想知道它的字符輸入,A如a无虚。
下面的代碼片斷隱藏單元根據(jù)按鍵:

鼠標(biāo)事件
當(dāng)用戶使用指向設(shè)備如鼠標(biāo)時(shí)進(jìn)行交互時(shí)缔赠,鼠標(biāo)事件被觸發(fā)。事件可以根據(jù)點(diǎn)擊喜歡單擊友题,雙擊和右鍵菜單或運(yùn)動(dòng)嗤堰,像MouseEnter、MouseLeave和MouseMove度宦。在這一節(jié)中我將討論所有這些簡(jiǎn)單的包括一些演示來(lái)說明它們之間的細(xì)微差別踢匣。
基于點(diǎn)擊事件
有五個(gè)點(diǎn)擊基于事件的方法定義在jQuery。MouseDown和MouseUp事件戈抄,明顯的名字离唬,被解雇,當(dāng)用戶按下并釋放鼠標(biāo)按鈕元素上分別划鸽。另一方面输莺,只有當(dāng)鼠標(biāo)按鈕被按下并釋放到指定的元素后,單擊事件才被觸發(fā)裸诽。
雙擊要稍微復(fù)雜一些嫂用。一個(gè)事件被登記為雙擊應(yīng)該有兩個(gè)快速鼠標(biāo)點(diǎn)擊某一系統(tǒng)相關(guān)的時(shí)間間隔到期之前。你不應(yīng)該把處理單元為單擊和雙擊的事件同時(shí)觸發(fā)雙擊特定瀏覽器丈冬。一些瀏覽器可能注冊(cè)2個(gè)單點(diǎn)的點(diǎn)擊事件之前嘱函,雙擊一個(gè),而其他人可能只注冊(cè)一個(gè)點(diǎn)擊事件之前埂蕊,雙擊往弓。
ContextMenu事件后一個(gè)元素的右鍵單擊只是在顯示上下文菜單了。這意味著你可以在事件處理程序中使用適當(dāng)?shù)拇a來(lái)阻止默認(rèn)的上下文菜單蓄氧。
下面的代碼段防止默認(rèn)的上下文菜單顯示在右擊顯示自定義菜單代替:

這個(gè)演示應(yīng)用CSS樣式的圖像時(shí)函似,它的點(diǎn)擊,并有一個(gè)自定義的上下文菜單:

基于運(yùn)動(dòng)的事件
有些事件是基于鼠標(biāo)指針的移動(dòng)匀们,或者是在元素的移動(dòng)中缴淋。有六個(gè)基于運(yùn)動(dòng)的事件方法。
讓我們用鼠標(biāo)懸停和MouseEnter事件開始泄朴。當(dāng)鼠標(biāo)指針進(jìn)入一個(gè)元素時(shí)重抖,這個(gè)名字就說明了這兩個(gè)事件的發(fā)生。同樣祖灰,MouseLeave和mouseout事件火當(dāng)鼠標(biāo)指針離開元素钟沛。
MouseLeave和mouseout的一個(gè)區(qū)別是,前者是僅當(dāng)鼠標(biāo)指針移動(dòng)一個(gè)元素勢(shì)必外發(fā)射局扶。另一方面恨统,mouseout觸發(fā)甚至以外的任何后代元素的運(yùn)動(dòng)叁扫。MouseEnter和mouseover之間存在同樣的差異。

讓我們來(lái)看看在如何MouseEnter和mouseover事件變化基于鼠標(biāo)動(dòng)作的統(tǒng)計(jì)看畜埋。試著從右邊進(jìn)入大藍(lán)方塊莫绣,然后在進(jìn)入右邊的粉紅色框之前停止。兩MouseEnter和mouseover現(xiàn)在應(yīng)該有值1悠鞍。如果你向左移動(dòng)并進(jìn)入粉紅色的盒子对室,mouseover計(jì)數(shù)的變化兩。這是因?yàn)槭录芭莸膍ouseover事件咖祭。在粉紅色的盒子“泡沫”到外藍(lán)箱的mouseover事件掩宜,由1增加themouseover事件計(jì)數(shù)。當(dāng)你再離開和停止的粉色盒子之間么翰,mouseover事件再次開火的時(shí)候牺汤,你到達(dá)藍(lán)箱左端的mouseover事件計(jì)數(shù)應(yīng)該是5和計(jì)數(shù)MouseEnter事件仍然應(yīng)該是1。
同樣的概念也適用于解釋MouseLeave和mouseout事件計(jì)數(shù)浩嫌。試著在不同方向移動(dòng)檐迟,看看計(jì)數(shù)的變化。

事件MouseMove和懸停
MouseMove事件被觸發(fā)時(shí)固该,鼠標(biāo)指針移動(dòng)一個(gè)元素內(nèi)锅减。它觸發(fā)了鼠標(biāo)移動(dòng)糖儡,即使它是一個(gè)像素的小伐坏。因此,數(shù)以百計(jì)的事件可以在一個(gè)小的時(shí)間被解雇握联。你可以想象桦沉,在事件處理程序中執(zhí)行復(fù)雜的操作會(huì)導(dǎo)致瀏覽器延遲。明智的做法是讓MouseMove事件處理程序盡可能高效金闽,解開它時(shí)纯露,它不再需要。
只有當(dāng)鼠標(biāo)指針進(jìn)入或離開該元素時(shí)代芜,才觸發(fā)鼠標(biāo)懸停狀態(tài)埠褪。有2種方法調(diào)用懸停方法。第一個(gè)是:

在這里挤庇,handlerin()執(zhí)行當(dāng)鼠標(biāo)指針進(jìn)入元和handlerout()當(dāng)鼠標(biāo)指針離開它钞速。二是:

這一次同樣的handlerinout功能是對(duì)進(jìn)入和離開的元素執(zhí)行。

注:此演示使用CSS濾鏡效果嫡秕,這是不支持的IE瀏覽器渴语。
活動(dòng)形式
表格在網(wǎng)上隨處可見。幾乎每一個(gè)用戶在某個(gè)點(diǎn)上填寫一個(gè)表格昆咽。jQuery有特殊方法專門處理事件的方式驾凶。這些事件可以觸發(fā)一個(gè)值的變化或損失的焦點(diǎn)牙甫。有七種形式的事件,我們將逐一討論他們调违。
模糊窟哺,焦點(diǎn),焦點(diǎn)和focusout事件
focus事件被觸發(fā)時(shí)技肩,當(dāng)元素獲得焦點(diǎn)脏答。它僅適用于組成元素和錨標(biāo)簽。觸發(fā)其它任何元素亩鬼,你需要設(shè)置元素的屬性的作用重點(diǎn)殖告。但是,設(shè)置集中在隱藏元素將導(dǎo)致一個(gè)錯(cuò)誤在互聯(lián)網(wǎng)瀏覽器雳锋。如果你有觸發(fā)焦點(diǎn)事件沒有設(shè)置重點(diǎn)明確黄绩,你可以使用triggerhandler(“focus”)的方法。
當(dāng)元素失去焦點(diǎn)時(shí)玷过,就觸發(fā)了模糊事件爽丹。在較舊的瀏覽器中,此事件僅適用于表單元素辛蚊。
不同的焦點(diǎn)事件粤蝎,焦點(diǎn)是解雇任何元素或其后代獲得焦點(diǎn)。同樣袋马,focusout解雇任何元素或其后代失去焦點(diǎn)初澎。所以,如果你想讓事件發(fā)生虑凛,你應(yīng)該用這2個(gè)事件來(lái)代替碑宴。
The Select, Change and Submit 事件
當(dāng)元素改變值時(shí),該更改事件被觸發(fā)桑谍。此事件僅適用于 <input>, <textarea> 和 <select>元素延柠。在復(fù)選框,單選按鈕锣披,選擇框贞间,這個(gè)事件被當(dāng)用戶作出選擇。在其他元素上雹仿,它只能在元素失去焦點(diǎn)后觸發(fā)增热。還注意到,這一事件不會(huì)是如果一個(gè)輸入元素的值被改變使用JavaScript觸發(fā)盅粪。
當(dāng)用戶在元素中進(jìn)行文本選擇時(shí)钓葫,會(huì)觸發(fā)選擇事件。這一事件更多的范圍有限票顾,只適用于 <input type="text">和<textarea>元素础浮。如果你想檢索選定文本帆调,你可以使用一個(gè)跨瀏覽器的插件。
當(dāng)用戶試圖提交表單時(shí)豆同,submit事件被觸發(fā)番刊。你只能附加處理程序以形成元素。為觸發(fā)這個(gè)事件影锈,用戶必須點(diǎn)擊<input type="submit">,<button type="submit"> 或 <input type="image">芹务。有趣的是,JavaScript submit事件不在Internet Explorer鸭廷。然而枣抱,這種行為已經(jīng)常態(tài)化的跨瀏覽器在jQuery 1.4版本。

在jQuery 3的變化
負(fù)載誤差和卸載方法已被否決因?yàn)閖Query 1.8版本辆床。load()方法在本質(zhì)上是不明確的佳晶。這種方法可以是一個(gè)AJAX加載或加載事件的實(shí)際射擊。同樣的讼载, error的方法也可以用 jQuery.error() 方法混淆〗窝恚現(xiàn)在在jQuery 3,這些方法已經(jīng)被刪除∽傻蹋現(xiàn)在菇篡,您將要使用的方法來(lái)注冊(cè)這些事件偵聽器。
留在最后的思考
在這篇文章中一喘,我已經(jīng)把所有主要的jQuery事件方法隨著相似事件之間的差異驱还。知道何時(shí)使用 keypress 代替 keydown可以幫助你避免麻煩,節(jié)省寶貴的時(shí)間津滞。盡管能夠鉤到DOM事件與普通的JavaScript铝侵、jQuery是引擎蓋下做一些規(guī)范化的跨瀏覽器的差異灼伤,這可能是一個(gè)優(yōu)勢(shì)触徐,這取決于你的網(wǎng)站/應(yīng)用程序的瀏覽器支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐赡,一起剝皮案震驚了整個(gè)濱河市撞鹉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颖侄,老刑警劉巖鸟雏,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異览祖,居然都是意外死亡孝鹊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門展蒂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)又活,“玉大人苔咪,你說我怎么就攤上這事×荆” “怎么了团赏?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)耐薯。 經(jīng)常有香客問我舔清,道長(zhǎng),這世上最難降的妖魔是什么曲初? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任体谒,我火速辦了婚禮,結(jié)果婚禮上臼婆,老公的妹妹穿的比我還像新娘营密。我一直安慰自己,他們只是感情好目锭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布评汰。 她就那樣靜靜地躺著,像睡著了一般痢虹。 火紅的嫁衣襯著肌膚如雪被去。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天奖唯,我揣著相機(jī)與錄音惨缆,去河邊找鬼。 笑死丰捷,一個(gè)胖子當(dāng)著我的面吹牛坯墨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播病往,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼捣染,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了停巷?” 一聲冷哼從身側(cè)響起耍攘,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畔勤,沒想到半個(gè)月后蕾各,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庆揪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年式曲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缸榛。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吝羞,死狀恐怖始鱼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脆贵,我是刑警寧澤医清,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站卖氨,受9級(jí)特大地震影響会烙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筒捺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一柏腻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧系吭,春花似錦五嫂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至则吟,卻和暖如春槐臀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氓仲。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工水慨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敬扛。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓晰洒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親啥箭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谍珊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一、選擇網(wǎng)頁(yè)元素 選擇表達(dá)式可以是CSS選擇器: $(document)//選擇整個(gè)文檔對(duì)象 $('#myId')...
    孤魂草閱讀 347評(píng)論 0 1
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,324評(píng)論 0 8
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,598評(píng)論 2 10
  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    程序員poetry閱讀 16,639評(píng)論 18 503
  • 雨夜 孤坐在桌前 仿佛被禁言 文思枯竭 只有一股平靜的憂傷在心間流淌 越活越牢 越活越累 失了樂天 迷了初心 多了...
    Impermanence閱讀 232評(píng)論 0 0