jquery事件使用方法總結


jquery提供了許多的事件處理函數,下面對其總結一下,梳理一下知識點,便於記憶和使用。


一、鼠標事件

1. click():鼠標單擊事件

$div = $("div")
$div.click(data,function (event) { //點擊盒子變藍
    $(this).css({
        "background": "blue",
    }); 
    console.log(event);
})
  • 參數function:匿名函數有且只有一個默認的參數event,event輸出事件相關的信息;不允許有其他的參數,可以不寫
  • 參數data:有時候需要傳遞額外的數據給函數,data可以是一個數組,不需要可以省略

擴展:

//event參數可以獲取事件的各種屬性,有幾個常用

event.target:  獲取觸發事件的元素

$div.click(function (event) {
            $(event.target).css({
                    "background": "blue",
                });
    })
    
event.data: 獲取事件傳入的參數數據。
event.pageX: 獲取鼠標光標點擊距離文檔左邊left的距離;
event.pageY: 獲取鼠標光標點擊距離文檔上邊top的距離;

event.offsetX: 獲取鼠標光標點擊距離元素左邊left的距離;
event.offssetY: 獲取鼠標光標點擊距離元素上邊top的距離;

event.screenX: 獲取鼠標光標點擊距離屏幕left的距離;
event.screenY: 獲取鼠標光標點擊距離屏幕top的距離;

2. dblclick():鼠標雙擊事件

$div = $("div")
$div.dblclick()(function (event) { //雙擊盒子變藍
    $(this).css({
        "background": "blue",
    });               
})
  • 參數和click的用法完全一樣,event同樣可以獲取眾多的屬性。

3. 鼠標進入和離開(進入子元素也觸發)

  • mouseover():進入
  • mouseout():離開
$div = $("div")
$div.mouseover(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
$div.mouseout(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
  • 參數同上,綁定后鼠標進入元素的子元素會再次觸發。

4. 鼠標進入和離開(進入子元素不觸發)

  • mouseenter() 鼠標進入
  • mouseleave() 鼠標離開
$div = $("div")
$div.mouseenter(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
$div.mouseleave(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
  • 參數同上,綁定后鼠標進入和離開子元素不會再次觸發。

5. hover():同時為mouseenter和mouseleave事件指定處理函數

$div = $("div")
// 鼠標進入和移出事件
    $div.hover(function (event) {
        $div.css({
            "background": "blue",
        })

    },function (event) {
        $div.css({
            "background": "red", 
        });
    })
  • hover可以同時加入兩個function,第一個是鼠標進入觸發,第二個是移出觸發。
  • 前面不可以添加data參數,否則報錯。

6. 鼠標按下和松開

  • mouseup() 松開鼠標
  • mousedown() 按下鼠標
$div = $("div")
$div.mousedown(function (event) {
    $(this).css({
        "background": "blue",
    });
    console.log(event);
})

$div.mouseup(function (event) {
    $(this).css({
        "background": "blue",
    });
    console.log(event);
})
  • 參數同click,和點擊事件click不同的是,click在鼠標點擊(包括按下和松開)后才觸發事件,這里是按下或松開就會觸發。

7. mousemove() 鼠標在元素內部移動

  • 同法和參數同上。

二、鍵盤事件

*keypress():按下鍵盤(指的是按下)

 $(window).keypress([20],function (event) {
        $div.css({
            "background": "blue",
        });
    console.log(event.which);            
    })
  • 參數:同鼠標事件,第一個參數傳遞數據,function默認參數event值按下鍵盤事件。
  • 鍵盤事件需要綁定可獲得焦點的元素,如:input,body,html,一般綁定窗口:window。
  • 如果需要具體判斷按下了那個按鍵,使用event.which,返回鍵盤字母的ascii碼。

注意:如果按下不放開,事件會連續觸發。

*按下和松開

  • keydown() 按下鍵盤
  • keyup() 松開鍵盤
$(window).keydown([20],function (event) {
    $div.css({
        "background": "blue",
    });
    console.log(event);
})

$(window).keyup([20],function (event) {
    $div.css({
        "background": "blue",
    });
    console.log(event);
})


  • 參數同上。
  • keydown和keypress方法區別在於,keypress事件不會觸發所有的按鍵,比如 ALT、CTRL、SHIFT、ESC等。

三、焦點事件

* 元素獲取和失去焦點

  • blur() 元素失去焦點
  • focus() 元素獲得焦點
$put = $("input");
$put.focus():元素自動獲取焦點

$put.focus(function (event) {
    console.log(event);
        $div.css({
        "background": "blue",
            })
})//獲取焦點后觸發事件

$put.blur(function (event) {
    console.log(event);
        $div.css({
        "background": "blue",
            })
})//失去焦點后觸發事件

  • 參數同click;
  • 焦點事件一般使用在input標簽上,其他的標簽一般得不到焦點。

四、表單事件

* submit(): 用戶遞交表單

$(".form").submit(function (event) {
    alert("提交事件");
    console.log(event);
    //阻止系統默認事件
    event.defaultPrevented();
    return false;
})
  • submit事件綁定在form表單上,點擊提交按鈕時觸發該事件,可以對系統默認的提交進行攔截。
  • event.defaultPrevented();//阻止系統提交數據

五、其他事件

* ready():DOM加載完成后執行

  • 這個事件用來防止js報錯,每次引入js都要使用,不在贅述。

* resize():瀏覽器窗口的大小發生改變觸發事件

$(window).resize(function () {
    console.log($(window).width());
   })
   
  • 參數同click,這個事件需要綁定在window上才會生效,用於監控窗口的變化。

* scroll():滾動條的位置發生變化

* change(): 表單元素的值發生變化

$put.change(function () {
    $div.css({
        "background": "blue",
    });
                
})
  • 當表單元素如單選框、多選框、文本框等值發生變化時觸發。

* unload() :用戶離開頁面

$(document).unload(function () {
    $div.css({
        "background": "blue",
    });
    console.log("likai");
})

六、通用的綁定事件和解綁方法

* bind():綁定

$(function(){
    $('div').bind('mouseover click', function(event) {
        alert($(this).html());
    });
});
   
  • 參數:第一個參數為需要綁定的事件的名字,可以綁定多個事件,之間用空格隔開;第二個參數是處理函數。

* unbind():解綁

$(function(){
    $('#div1').bind('mouseover click', function(event) {
        // $(this).unbind();解綁所有事件
        $(this).unbind('mouseover');解綁指定事件
    });
});
  • 參數同bind。

* on():綁定和委托都可用的方法

$("div").on(event,childSelector,data,function);
//四個參數

$(function(){
    $('div').on('mouseover click', function(event) {
        $(this).css({
        "background": "blue",
        });
    });
});
  • 參數
  • event,需要綁定的事件,多個事件用空格隔開;
  • function:事件的處理方法。
  • childSelector:選擇需要委托的元素,用於委托事件。
  • data:額外的傳參。

* off():解綁

$(function(){
    $('#div1').on('mouseover click', function(event) {
        // $(this).off();解綁所有事件
        $(this).off('mouseover');解綁指定事件
    });
});

* one():綁定一次自動解綁

如果需要觸發事件一次后就自動失效,比如:按鈕點擊一次后 就失效使用這個方法。

$(function(){
    $('div').one('mouseover click', function(event) {
        $(this).css({
        "background": "blue",
        });
    });
});
  • 注意:當一次性綁定多個事件時,多個事件相互是獨立的,即如果有一個事件被觸發,那么這個事件解綁,對另外沒有被觸發的事件沒有影響。

七、自定義和主動觸發事件

說明:對於系統沒有提供的事件,可以自己定義並主動觸發。

$div.bind("abc",function () {
    $(this).css({
        "background": "blue",
    });
    
})
$div.trigger("abc");

  • trigger():觸發事件的方法;這種方式類似協程。

八、事件的兩大特征運用:

1. 事件的冒泡:

  • 定義:一個元素標簽如div,在上面觸發某種事件,如單擊;如果div上沒有定義單擊事件或者定義了單擊事件,但返回值不是false,即沒有阻止冒泡;那么事件會向父級傳遞,每一個定義了單擊事件的父級都會被觸發事件,直到到達document或window。
注意:冒泡是事件的固有屬性(自定義不適用),適合所有的系統事件。
  • 作用: 允許多個事件被擊中到父級處理,減少綁定次數,提高性能。
$(function(){
    var $box1 = $('.father');
    var $box2 = $('.son');
    var $box3 = $('.grandson');
    $box1.click(function() {
        alert('father');
    });
    $box2.click(function() {
        alert('son');
    });
    $box3.click(function(event) {
        alert('grandson');
       // event.stopPropagation();阻止冒泡

    });
    $(document).click(function(event) {
        alert('grandfather');
    });
})

......

<div class="father">
    <div class="son">
        <div class="grandson"></div>
    </div>
</div>
  • 說明:上面代碼界面,單擊“grandson”的div,所有事件都會被觸發;
  • 如果要阻止事件冒泡,使用stopPropagation()

擴展:合並阻止操作

event.stopPropagation();//阻止冒泡
event.preventDefault();//阻止默認行為

// 合並寫法:
return false;
  • 實際開發中,一般把阻止冒泡和阻止默認行為合並起來寫。

2. 事件委托

  • 定義:

  • 利用冒泡原理,將要處理相同事件的子元素的事件委托給父級,從而極大減少事件綁定的次數,提高性能。

  • 委托事件

  1. delegate():
$(function(){
    $list = $('list');
    $list.delegate('li', 'click', function(event) {
        $(this).css({background:'red'});
    });
})//給列表下面的每個li元素的事件委托給list列表。
  • 參數:第一個參數是需要委托的元素,采用css選擇器的寫法,默認從一級子元素開始;第二個參數時要委托的事件,可以是多個,之間用空格隔開,第三個參數是處理函數。

  • event指觸發事件的那個對象。

  1. on():
$(function(){
    $list = $('list');
    $list.on('click', 'li', function(event) {
        $(this).css({background:'red'});
    });
})//給列表下面的每個li元素的事件委托給list列表。
  • 參數:
    • 第一個是需要委托的事件,多個用空格隔開;
    • 第二個是需要委托事件的子元素;
    • 第三個是觸發處理函數。
  1. one():委托觸發一次自動取消委托
$(function(){
    $('div').one('click',"li" function(event) {
        $(this).css({
        "background": "blue",
        });
    });
});

  • 說明:參數用法和on事件一樣。

  • 取消委托

  1. undelegate():
$list.undelegate();//選擇器找到委托對象取消委托
  • 使用undelegate()方法取消委托,所有的子元素的委托都將被取消。
  1. off():
$list.off("click","li");

總結:

  • 每一個事件相當於一個協程,異步操作;
  • 所有的事件並列處理,事件不要嵌套事件,否則會出現重復綁定。
  • 可以進行事件委托盡量使用委托,減少系統資源消耗。
  • 作者:天宇之游
  • 出處:http://www.cnblogs.com/cwp-bg/
  • 本文版權歸作者和博客園共有,歡迎轉載、交流,但未經作者同意必須保留此段聲明,且在文章明顯位置給出原文鏈接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM