深入淺出 jQuery中的事件機(jī)制
首先呢,我們先來看一下,jQuery中的ready事件,它的作用有些類似于window中的onload事件,只不過二者的區(qū)別在于,onload事件是要等到網(wǎng)頁中的dom節(jié)點(diǎn)加載完成,并且css進(jìn)行樣式渲染后,JavaScript中進(jìn)行了預(yù)加載后再執(zhí)行,而ready事件呢,是在網(wǎng)頁中的標(biāo)簽被解析為DOM節(jié)點(diǎn)是就執(zhí)行其中的函數(shù),直白點(diǎn)說,ready執(zhí)行的比onload早,那么我們?cè)谟胘Query的時(shí)候,需要做一個(gè)ready的執(zhí)行定義:
//ready的作用,是為具體加載的實(shí)現(xiàn). $(document).ready(function(){ alert('1234'); }); //第二種,少了一個(gè)document,創(chuàng)建一個(gè)空的jQuery對(duì)象. $().ready(function(){ alert('abcd'); }); //第三種,簡寫版的, $(function (){ alert('23333'); });
那么我們?cè)賮砜匆幌耾nload和ready的第二個(gè)區(qū)別:
//如果有兩個(gè)window.onload它只會(huì)執(zhí)行最后一個(gè).如果有多個(gè)的話,后邊的會(huì)將前面的覆蓋掉. window.onload=function(){ alert(1); } window.onload = function(){ alert(2); } //而window.ready 則可以設(shè)置多個(gè)函數(shù),都去作用. $(document).ready(function(){alert(1)}) $(document).ready(function(){alert(3)}) //這里的可以設(shè)置多個(gè)函數(shù),是指的對(duì)于同一個(gè)對(duì)象設(shè)置
那么我們?cè)賮砜匆幌耲Query中的事件綁定,這里我們一onclick事件來舉例,當(dāng)我們?cè)趈s中進(jìn)行事件綁定的時(shí)候,我們分為dom1級(jí)事件,dom2級(jí)事件,其中還包括對(duì)于IE瀏覽器的兼容性考慮,那么當(dāng)我們使用jQuery中的事件機(jī)制時(shí),就不用去考慮那么多了,jQuery內(nèi)部已經(jīng)幫我們做好了兼容性之類的操作,講真,這真的是很方便了我們了:
//DOM1級(jí)事件 var itNode = document.getElementById('id'); itNode.onclick = function(){}; div.onclick = null; DOM1級(jí)中解除事件綁定 //DOM2級(jí)事件 itNode.addEventListener('click',function(){}); itNode.removeEventListener(); itNode.attachEvent();//IE 6 8 7 兼容性處理 detachEvent(); IE中接觸事件綁定 //使用jQuery來操作綁定事件 //$().事件類型(function(){}); //$().事件類型(); $(function(){ $('div').click(function(){//給div綁定了一個(gè)onclick事件 $('div').css('color','green'); }); $('div').mouseover(function(){ $(this).css('color','yellow'); }); });
這里的一個(gè)主意點(diǎn)就是當(dāng)綁定事件時(shí),事件名是不用寫on的,其實(shí)我們還可以用另一種寫法$('div').on('click',funciton(){});上面的那種寫法就是這種寫法的簡化,二者的作用還是一樣的.那么當(dāng)我們需要給當(dāng)前jQuery對(duì)象添加多個(gè)事件的時(shí)候,我們就可以使用bind方法來處理了:
//$().bind(事件類型,事件處理函數(shù)(分為有名函數(shù),和匿名函數(shù))) $(function(){ //綁定一個(gè)鼠標(biāo)移動(dòng)上去處理的事件. $('div').bind('mouseover',function(){ $('div').css('background-color','blue'); }); $('div').bind('mouseout',function(){ $('div').css('background-color','yellow'); }); //一個(gè)函數(shù)綁定多個(gè)事件 這多個(gè)時(shí)間之間只需要用空格隔開. //這個(gè)雖然可以綁定多個(gè)事件,但是函數(shù)比較單一,不靈活. $('div').bind('mouseover mouseout',function(){ console.log(1234); }); //使用對(duì)象的形式來綁定多個(gè)事件, $('div').bind({ click: function(){console.log(1);}, mouseover: function(){alert(22);}, mouseout : function(){alert(33);} }); //綁定有名的函數(shù) function fa(){alert("fa");}; function fb(){alert("fb");}; function fc(){alert("fc");}; $('div').bind('click',fb); $('div').bind('click',fc); $('div').unbind();//這樣直接調(diào)用unbind函數(shù)會(huì)直接將所有綁定的事件都取消掉. $('div').unbind('click');//這樣子就會(huì)將div里邊所有的click綁定的事件取消掉了 //直接解除指定的函數(shù)的綁定,這種方式也只能解除有名函數(shù)的綁定,不能解除指定的匿名函數(shù)的綁定 $('div').unbind('click',fa); });
當(dāng)然,在事件處理中,事件對(duì)象無疑是我們經(jīng)常要使用的一個(gè)對(duì)象,在js中,我們獲取對(duì)象時(shí)還要考慮到兼容性問題,但是在jquery中,我們根本就不用考慮,只需要直接使用函數(shù)中傳遞的event參數(shù)就行了:
function(evt){ var evt = evt || window.event; evt.preventDefault();//主流瀏覽器阻止默認(rèn)事件 evt.returnValue = false;// IE中阻止對(duì)象默認(rèn)事件 evt.stopPropagation();//主流瀏覽器中阻止瀏覽器冒泡 evt.cancelBubble();//IE中阻止瀏覽器冒泡處理 } $().bind('click',function(evt){ //evt不用做兼容性處理 evt.preventDefault();//阻止瀏覽器的默認(rèn)動(dòng)作. evt.stopPropagation();//阻止瀏覽器冒泡, });
當(dāng)然了,我們jQuery中的事件也是由鍵盤事件,鼠標(biāo)事件,表單事件,甚至還有自定義的事件等等,和js中的基本一樣,總結(jié)起來呢,使用jQuery使我們不用去考慮兼容性問題,同時(shí)代碼量也大大的減少了.
以上所述是小編給大家介紹的jQuery中的事件機(jī)制,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
輕量級(jí)網(wǎng)頁遮罩層jQuery插件用法實(shí)例
這篇文章主要介紹了輕量級(jí)網(wǎng)頁遮罩層jQuery插件用法,實(shí)例分析了jquery遮罩層插件的定義、功能及使用方法,非常簡單實(shí)用,需要的朋友可以參考下2015-07-07jquery的ajax提交form表單的兩種方法小結(jié)(推薦)
下面小編就為大家?guī)硪黄猨query的ajax提交form表單的兩種方法小結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考2016-05-05jQuery鏈?zhǔn)秸{(diào)用與show知識(shí)淺析
這篇文章主要介紹了jQuery的XX如何實(shí)現(xiàn)?——2.show與鏈?zhǔn)秸{(diào)用 的相關(guān)資料,非常具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05jquery mobile實(shí)現(xiàn)可折疊的導(dǎo)航按鈕
這篇文章主要為大家詳細(xì)介紹了jquery mobile實(shí)現(xiàn)可折疊的導(dǎo)航按鈕,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03ASP.NET jQuery 實(shí)例7 通過jQuery來獲取DropDownList的Text/Value屬性值
這節(jié)我們將通過jQuery來獲取DropDownList的Text/Value屬性值,需要的朋友可以參考下2012-02-02jquery精度計(jì)算代碼 jquery指定精確小數(shù)位
這篇文章主要為大家詳細(xì)介紹了jquery精度計(jì)算代碼,jquery指定精確小數(shù)位,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02使用jQuery向asp.net Mvc傳遞復(fù)雜json數(shù)據(jù)-ModelBinder篇
jQuery提供的ajax方法能很方便的實(shí)現(xiàn)客戶端與服務(wù)器的異步交互,在asp.net mvc 框架使用jQuery能很方便地異步獲取提交數(shù)據(jù),給用戶提供更好的體驗(yàn)!2010-05-05