1. 程式人生 > >jQuery中的事件

jQuery中的事件

方法 ever () 圖片 關聯 ready click type see

1.加載DOM

在頁面加載完畢後,JS用window.onload為DOM元素添加事件,jQuery中,用$(document).ready()為DOM元素添加事件,使用該方法可以在DOM載入就緒時對其進行操作並調用執行它所綁定的函數。

window.onload和$(document).ready()對比

window.onload=function(){} $(document).ready(function(){})
執行機制 必須等到網頁中的所有內容加載完畢後(包括圖片) 網頁中所有DOM結構繪制完畢後就執行,可能DOM元素關聯的東西並沒有加載完
編寫個數 不能同時編寫多個 可以同時編寫多個
簡化寫法

$(document)可以簡寫為$(),不帶參數時默認為document,因此可簡寫為:

①$(document).ready(function(){})

②$(function(){})

對比

極大地提高了Web應用程序的相應速度

缺點

元素的關聯文件未下載完,造成某些屬性的無效

解決辦法

使用另一個關於頁面加載的方法——load()方法

補充:load()方法會在元素的onload事件中綁定一個處理函數,如果處理函數綁定給window對象,則會在所有內容(包括窗口、框架、對象和圖像等)加載完畢後觸發,如果處理函數綁定在元素上,會在元素的內容加載完畢後觸發。

1 $(window).load(function(){
2 //編寫代碼
3 })

2.事件綁定— —bind()方法

格式:bind(type [, data] , fn)

第一個參數是事件類型:blur、focus、load、unload、resize、scroll、click、dblclick、mousedown、mouseover、mouseup、mousemove、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keypress、keyup、error

第二個參數是可選參數,作為evert.data屬性值傳遞給事件對象的額外數據對象

第三個餐食是用來綁定的處理函數

補充:判斷一個元素是否顯示,jQuery中用is()方法

簡寫:.mouseover(function(){})

3.合成事件

hover()方法:模擬光標懸停事件

格式:hover(enter , leave);

當光標移動到元素上時,會觸發指定的第一個函數,當光標移除這個元素時,會觸發指定的第2個函數

替代事件:bind("mouseenter")和bind("mouseleave")

toggle()方法:模擬鼠標的連續單擊事件

格式:toggle(fn1,fn3......fnN);

1 $(function()){
2       $("#panel").toggle(function(){
3                $(this).next().show();
4        },function(){
5                 $(this).next().hide();
6        })
7 })

補充toggle還有另一個作用:切換元素的可見狀態。如果元素課件,單擊後切換為隱藏。如果元素是隱藏的,單擊切換後為可見

$(function()){
       $("#panel").toggle(function(){
                $(this).next().toggle();
        },function(){
                 $(this).next().toggle();
        })
})

4.事件冒泡

冒泡:嵌套元素相應同一個事件的執行順序,事件按照DOM的層次結構向上直至頂端

事件冒泡引發的問題:

(1)事件對象:event

創建事件對象只需要為事件處理函數添加一個參數event,對元素執行事件時,事件對象就被創建了,這個對象只有事件處理函數才能訪問到,事件處理函數執行完畢後,事件對象就被銷毀

(2)停止事件冒泡:event.stopPropagation()方法

(3)阻止默認行為:event.preventDefault()方法

例子:表單驗證不符合提交條件時阻止表單的提交(默認行為)

1 $(function(){
2        $("#sub").bind("click",function(event){
3                var username=$("#username").val();
4                if(username==""){
5                       $(""#msg).html("<p>文本框內容不能為空</p>");
6                       event.preventDefault();
7                }
8          })
9 })

如果想同時對事件對象停止冒泡和默認行為,可在事件處理函數中返回false

5.事件捕獲

事件捕獲和事件冒泡是想法的過程,事件捕獲是從頂端往下開始觸發

並非所有的瀏覽器都支持事件捕獲,jQuery也不支持

6.事件對象的屬性

屬性和方法 作用
event.type 獲取事件的類型
event.preventDefault() 阻止默認的事件行為
event.stopPropagation() 阻止事件冒泡
event.target 獲取觸發事件的元素
event.relatedTarget

補充:(1)JS中的stopPropagation()方法不兼容IE瀏覽器

jQuery中的事件