JQuery中Bind()事件用法分析
本文實(shí)例分析了JQuery中Bind()事件用法。分享給大家供大家參考。具體分析如下:
我們先看一下它的定義:
.bind( eventType [, eventData], handler(eventObject))
.Bind()方法的主要功能是在向它綁定的對(duì)象上面提供一些事件方法的行為。期中它的三個(gè)參數(shù)的意義分別如下:
eventType是一個(gè)字符串類型的事件類型,就是你所需要綁定的事件。這類類型可以包括如下:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error 。這里需要注意的是,這里用的都是javascript里面的事件方法,而不是JQuery里面的,JQuery里面的事件方法均在JavaScript 前面多了一個(gè)“on”,比如onclick,onblur 等等。
eventData參數(shù)是一個(gè)可選參數(shù),不過(guò)它在平時(shí)用的比較少。如果提供了這個(gè)參數(shù),那么我們就能把一些附加信息傳遞給事件處理函數(shù)了。這個(gè)參數(shù)有個(gè)很好的用處,就是處理閉包帶來(lái)的問(wèn)題。待會(huì)在給大家舉實(shí)例。
Handler是用來(lái)綁定的處理數(shù),其實(shí)也也就是回調(diào)函數(shù),處理完數(shù)據(jù)之后相應(yīng)的方法。
1.第一個(gè)簡(jiǎn)單的bind ()事件---Hello Word
<input id="BtnFirst"type="button"value="Click Me"/> <script> $(function () { $("#BtnFirst").bind("click",function(){ alert("Hello World"); }); }) </script>
打開(kāi)頁(yè)面之后,點(diǎn)擊按鈕“Click Me”,就會(huì)彈出”Hello World”。這算是我們最簡(jiǎn)單的綁定事件吧。很簡(jiǎn)單吧。
2.綁定多個(gè)事件
我們可以通過(guò)bind()來(lái)綁定多個(gè)事件(其實(shí),這也就是JQuery以及Linq中非常有名的鏈?zhǔn)骄幊蹋?shí)現(xiàn)的主要功能就是當(dāng)我們點(diǎn)擊的時(shí)候,彈出“Hello World”,當(dāng)離開(kāi)button的時(shí)候,顯示出一個(gè)div。
<div> <input id="BtnFirst"type="button"value="Click Me"/></div> <div id="TestDiv"style=" width:200px; height:200px; display:none; "> </div> <script> $(function () { $("#BtnFirst").bind("click", function () { alert("Hello World"); }).bind("mouseout", function () { $("#TestDiv").show("slow"); }); }) </script>
這段代碼頁(yè)很容易理解,就是當(dāng)button被點(diǎn)擊的時(shí)候,彈出一個(gè)"Hello World",在離開(kāi)的時(shí)候,在把div給顯示出來(lái)。JQuery里的動(dòng)畫,均可以用“slow”、“fast”和“normal”,當(dāng)然你還可以設(shè)置相關(guān)的毫秒數(shù)。
3.bind()事件的對(duì)象
Handler這個(gè)回調(diào)函數(shù)可以接受一個(gè)參數(shù),當(dāng)這個(gè)函數(shù)被調(diào)用時(shí),一個(gè)JavaScript事件對(duì)象會(huì)作為一個(gè)參數(shù)傳進(jìn)來(lái)。
這個(gè)事件對(duì)象通常是沒(méi)有必要且可以省略的參數(shù),因?yàn)楫?dāng)這個(gè)事件處理函數(shù)綁定的時(shí)候就能夠明確知道他在觸發(fā)的時(shí)候應(yīng)該做些什么,通常就已經(jīng)可以獲得充分的信息了。然而在有些時(shí)候,在事件初始化的時(shí)候需要獲取更多關(guān)于用戶環(huán)境的信息。
給一個(gè)JQuery官網(wǎng)上面的例子:
<style> p {background:yellow;font-weight:bold;cursor:pointer;3 padding:5px;} p.over {background:#ccc;} span {color:red;} </style> <p>Click or double click here.</p> <span></span> <script> $("p").bind("click", function(event){ var str = "( " + event.pageX + ", " + event.pageY + " )"; $("span").text("Click happened! " + str); }); $("p").bind("dblclick", function(){ $("span").text("Double-click happened in " + this.nodeName); }); $("p").bind("mouseenter mouseleave", function(event){ $(this).toggleClass("over"); }); </script>
這里的主要功能是為了實(shí)現(xiàn)當(dāng)用戶點(diǎn)擊p這個(gè)對(duì)象的時(shí)候,把當(dāng)前相對(duì)于頁(yè)面的坐標(biāo)顯示在span標(biāo)簽里面,這里就用到了event這個(gè)事件。把參數(shù)傳進(jìn)去。
4.unbind()事件
unbind([type],[data],Handler) 是 bind()的反向操作,從每一個(gè)匹配的元素中刪除綁定的事件。如果沒(méi)有參數(shù),則刪除所有綁定的事件。你可以將你用bind()注冊(cè)的自定義事件取消綁 定。如果提供了事件類型作為參數(shù),則只刪除該類型的綁定事件。如果把在綁定時(shí)傳遞的處理函數(shù)作為第二個(gè)參數(shù),則只有這個(gè)特定的事件處理函數(shù)會(huì)被刪除。
<body onclick="MyBodyClick()"> <div onclick="MyClickOut()"> <div onclick="MyClickInner()"> <span id="MySpan">I love JQuery!! </span> </div> </div> <span id="LooseFocus">失去焦點(diǎn)</span> </body> <script> function MyClickOut() { alert("outer Div"); } function MyClickInner() { alert("Inner Div"); } function MyBodyClick() { alert("Body Click"); } var foo = function () { alert("I'm span."); } $(function () { $("#MySpan").bind("click", foo); }) $(function () { $("#LooseFocus").unbind("click", foo); }) </script>
上面的代碼也很好理解,就是當(dāng)用戶的鼠標(biāo)在span上面停留的時(shí)候,然后把span的click事件給取消掉。所以,最后它只會(huì)彈出body里面的alert。
最后,簡(jiǎn)單的了解一下one()事件的使用,其實(shí)one和bind是一樣,都是為了綁定事件而產(chǎn)生的。One與bind基本上差不多,不同的在調(diào)用 jQuery.event.add時(shí),把注冊(cè)的事件處理的函數(shù)做了一個(gè)小小的調(diào)整。One調(diào)用了jQuery.event.proxy進(jìn)行了代理傳入的事 件處理函數(shù)。在事件觸發(fā)調(diào)用這個(gè)代理的函數(shù)時(shí),先把事件從cache中刪除,再執(zhí)行注冊(cè)的事件函數(shù)。這里就是閉包的應(yīng)用,通過(guò)閉包得到fn注冊(cè)的事件函數(shù) 的引用。
使用規(guī)則:
one(type,[data],fn)
為每一個(gè)匹配元素的特定事件(像click)綁定一個(gè)一次性的事件處理函數(shù)。 在每個(gè)對(duì)象上,這個(gè)事件處理函數(shù)只會(huì)被執(zhí)行一次。其他規(guī)則與bind()函數(shù)相同。這個(gè)事件處理函數(shù)會(huì)接收到一個(gè)事件對(duì)象,可以通過(guò)它來(lái)阻止(瀏覽器)默認(rèn)的行為。如果既想取消默認(rèn)的行為,又想阻止事件起泡,這個(gè)事件處理函數(shù)必須返回false。
貼一下,bind和one的各自代碼的實(shí)現(xiàn),看官可以稍微的做一個(gè)比較:
Bind()代碼的實(shí)現(xiàn):
bind : function(type, data, fn) { return type == "unload" ? this.one(type,data,fn) : this.each(function(){ //fn || data, fn && data實(shí)現(xiàn)了data參數(shù)可有可無(wú) jQuery.event.add(this, type, fn || data, fn && data); }); }
One()代碼的實(shí)現(xiàn):
one : function(type, data, fn) { var one = jQuery.event.proxy(fn || data, function(event) { jQuery(this).unbind(event, one); return (fn || data).apply(this, arguments); //this->當(dāng)前的元素 }); return this.each(function() { jQuery.event.add(this, type, one, fn && data); }); }
5.最后呢,其實(shí)想在貼一個(gè)冒泡事件,因?yàn)樵谔幚斫壎ㄊ录臅r(shí)候,如果調(diào)用內(nèi)部的事件 有可能會(huì)觸發(fā)外面的事件,所以給大伙一個(gè)借鑒吧。
這里可以參考一下javascript事件冒泡的文章:《JavaScript 事件冒泡簡(jiǎn)介及應(yīng)用》。
簡(jiǎn)單的說(shuō),何為冒泡事件?其實(shí),簡(jiǎn)單的理解是,也可以說(shuō)是事件傳播,它會(huì)從內(nèi)部的控件廣播到父類的元素,然后接著一直往上到祖先級(jí)別的元素。
則 冒泡實(shí)例代碼:
<body onclick="MyBodyClick()"> <div onclick="MyClickOut()"> <div onclick="MyClickInner()"> <span id="MySpan"> I love JQuery!! </span> </div> </div> </body> <script type="text/javascript"> function MyClickOut() { alert("outer Div"); } function MyClickInner() { alert("Inner Div"); } function MyBodyClick() { alert("Body Click"); } $(function () { $("#MySpan").bind("click", function (event) { alert("I'm span"); event.stopPropagation(); }); </script>
希望本文所述對(duì)大家的jQuery程序設(shè)計(jì)有所幫助。
- jQuery事件綁定.on()簡(jiǎn)要概述及應(yīng)用
- jquery移除、綁定、觸發(fā)元素事件使用示例詳解
- jQuery中的.bind()、.live()和.delegate()之間區(qū)別分析
- JQuery中綁定事件(bind())和移除事件(unbind())
- jQuery事件綁定on()、bind()與delegate() 方法詳解
- Query中click(),bind(),live(),delegate()的區(qū)別
- 讓IE8瀏覽器支持function.bind()方法
- 淺談javascript中call()、apply()、bind()的用法
- jQuery綁定事件方法及區(qū)別(bind,click,on,live,one)
相關(guān)文章
jquery scroll()區(qū)分橫向縱向滾動(dòng)條的方法
這篇文章主要介紹了使用jquery scroll()方法區(qū)分瀏覽器橫向和縱向滾動(dòng)條的方法,需要的朋友可以參考下2014-04-04jquery如何獲取元素的滾動(dòng)條高度等實(shí)現(xiàn)代碼
這篇文章主要介紹了jquery如何獲取元素的滾動(dòng)條高度等實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-10-10JQuery基于FormData異步提交數(shù)據(jù)文件
這篇文章主要介紹了JQuery基于FormData異步提交數(shù)據(jù)文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09JQuery組件基于Bootstrap的DropDownList(完整版)
這篇文章主要介紹了JQuery組件基于Bootstrap的DropDownList的完整版,在原有基礎(chǔ)上進(jìn)行完善功能,感興趣的小伙伴們可以參考一下2016-07-07jquery中的$(document).ready()使用小結(jié)
本篇文章主要是對(duì)jquery中的$(document).ready()使用方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02jQuery實(shí)現(xiàn)搜索頁(yè)面關(guān)鍵字的功能
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)搜索頁(yè)面關(guān)鍵字的功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02jquery圖片放大功能簡(jiǎn)單實(shí)現(xiàn)
圖片放大在某些例如商品細(xì)節(jié)放大圖比較常見(jiàn),本文寫了一個(gè)圖片放大的示例適合日常應(yīng)付,有需求的朋友可以參考下2013-08-08jQuery實(shí)現(xiàn)遍歷XML節(jié)點(diǎn)和屬性的方法示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)遍歷XML節(jié)點(diǎn)和屬性的方法,涉及jQuery針對(duì)xml文件的加載、節(jié)點(diǎn)遍歷等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04ajax頁(yè)面無(wú)刷新 IE下遭遇Ajax緩存導(dǎo)致數(shù)據(jù)不更新的問(wèn)題
在做ajax頁(yè)面無(wú)刷新添加的時(shí)候,IE下遭遇Ajax緩存,因?yàn)閯傞_(kāi)始并不知道IE有這個(gè)壞毛病,折騰好久,終于解決問(wèn)題,曬出來(lái)和大家分享,希望可以幫助你們2012-12-12