本文實例分析了JQuery中Bind()事件用法。分享給大家供大家參考。具體分析如下:
我們先來看看它的定義:
.bind( eventType [, eventData], handler(eventObject))
.Bind()方法的主要功能是在向它綁定的物件上面提供一些事件方法的行為。期中它的三個參數的意義分別如下:
eventType是一個字串類型的事件類型,就是你所需要綁定的事件。這類類型可以包括如下:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, , keyup, error 。這裡要注意的是,這裡用的都是javascript裡面的事件方法,而不是JQuery裡面的,JQuery裡面的事件方法都在JavaScript 前面多了一個“on”,例如onclick,onblur 等等。
eventData參數是一個可選參數,不過它在平常用的比較少。如果提供了這個參數,那麼我們就能把一些附加資訊傳遞給事件處理函數了。這個參數有個很好的用處,就是處理閉包帶來的問題。待會在舉實例給大家。
Handler是用來綁定的處理數,其實也也就是回呼函數,處理完資料之後對應的方法。
1.第一個簡單的bind ()事件---Hello Word
<input id="BtnFirst"type="button"value="Click Me"/> <script> $(function () { $("#BtnFirst").bind("click",function(){ alert("Hello World"); }); }) </script>
開啟頁面之後,點選按鈕“Click Me”,就會彈出”Hello World”。這算是我們最簡單的綁定事件吧。很簡單吧。
2.綁定多個事件
我們可以透過bind()來綁定多個事件(其實,這也就是JQuery以及Linq中非常有名的鍊式程式設計)。實現的主要功能就是當我們點擊的時候,彈出“Hello World”,當離開button的時候,顯示出一個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>
這段程式碼頁很容易理解,就是當button被點擊的時候,彈出一個"Hello World",在離開的時候,在把div給顯示出來。 JQuery裡的動畫,均可以用“slow”、“fast”和“normal”,當然你還可以設定相關的毫秒數。
3.bind()事件的物件
Handler這個回呼函數可以接受一個參數,當這個函數被呼叫時,一個JavaScript事件物件會作為一個參數傳進來。
這個事件物件通常是沒有必要且可以省略的參數,因為當這個事件處理函數綁定的時候就能夠明確知道他在觸發的時候應該做些什麼,通常就已經可以獲得充分的資訊了。然而在有些時候,在事件初始化的時候需要取得更多關於使用者環境的資訊。
給一個JQuery官網上面的範例:
<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>
這裡的主要功能是為了實現當使用者點擊p這個物件的時候,把當前相對於頁面的座標顯示在span標籤裡面,這裡就用到了event這個事件。把參數傳進去。
4.unbind()事件
unbind([type],[data],Handler) 是 bind()的反向操作,從每一個匹配的元素中刪除綁定的事件。如果沒有參數,則刪除所有綁定的事件。你可以將你用bind()註冊的自訂事件取消綁定 定。如果提供了事件類型作為參數,則只刪除該類型的綁定事件。如果把在綁定時傳遞的處理函數當作第二個參數,則只有這個特定的事件處理函數會被刪除。
<body onclick="MyBodyClick()"> <div onclick="MyClickOut()"> <div onclick="MyClickInner()"> <span id="MySpan">I love JQuery!! </span> </div> </div> <span id="LooseFocus">失去焦点</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>
上面的程式碼也很好理解,就是當使用者的滑鼠在span上面停留的時候,然後把span的click事件給取消掉。所以,最後它只會跳出body裡面的alert。
最後,簡單的了解一下one()事件的使用,其實one和bind是一樣,都是為了綁定事件而產生的。 One與bind基本上差不多,不同的在呼叫 jQuery.event.add時,把註冊的事件處理的函式做了一個小小的調整。 One呼叫了jQuery.event.proxy進行了代理傳入的事 件處理函式。當事件觸發呼叫這個代理的函數時,先把事件從cache中刪除,再執行註冊的事件函數。這裡就是閉包的應用,透過閉包得到fn註冊的事件函數 的引用。
使用規則:
one(type,[data],fn)
為每一個符合元素的特定事件(像click)綁定一個一次性的事件處理函數。 在每個物件上,這個事件處理函數只會被執行一次。其他規則與bind()函數相同。這個事件處理函數會接收到一個事件對象,可以透過它來阻止(瀏覽器)預設的行為。如果既想取消預設的行為,又想阻止事件起泡,這個事件處理函數必須回傳false。
貼一下,bind和one的各自程式碼的實作,看官可以稍微的做一個比較:
Bind()程式碼的實作:
bind : function(type, data, fn) { return type == "unload" ? this.one(type,data,fn) : this.each(function(){ //fn || data, fn && data实现了data参数可有可无 jQuery.event.add(this, type, fn || data, fn && data); }); }
One()程式碼的實作:
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->当前的元素 }); return this.each(function() { jQuery.event.add(this, type, one, fn && data); }); }
5.最后呢,其实想在贴一个冒泡事件,因为在处理绑定事件的时候,如果调用内部的事件 有可能会触发外面的事件,所以给大伙一个借鉴吧。
这里可以参考一下javascript事件冒泡的文章:《JavaScript 事件冒泡简介及应用》。
简单的说,何为冒泡事件?其实,简单的理解是,也可以说是事件传播,它会从内部的控件广播到父类的元素,然后接着一直往上到祖先级别的元素。
则 冒泡实例代码:
<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>
希望本文所述对大家的jQuery程序设计有所帮助。