jquery提供了許多的事件處理函數,下面對其總結一下,梳理一下知識點,便於記憶和使用。css
$div = $("div") $div.click(data,function (event) { //點擊盒子變藍 $(this).css({ "background": "blue", }); console.log(event); })
$div = $("div") $div.click(data,function (event) { //點擊盒子變藍 $(this).css({ "background": "blue", }); console.log(event); })html
擴展:jquery
//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:外層加個function函數表示,只有dom結構樹所有加載完以後,再執行jquery代碼,這樣代碼能夠放在開頭或任意位置了數組
如下是縮寫,非省略寫法是:瀏覽器
$(document.ready(function(){})) ---> $(function(){})app
<body> <script> $(function () { $div.click(data,function (event) { //點擊盒子變藍 $(this).css({ "background": "blue", }); console.log(event); }) }) </script> <div>1111</div> </body>
2. dblclick():鼠標雙擊事件dom
$div = $("div") $div.dblclick()(function (event) { //雙擊盒子變藍 $(this).css({ "background": "blue", }); })
3. 鼠標進入和離開(進入子元素也觸發)異步
$div = $("div") $div.mouseover(function (event) { $(this).css({ "background": "blue", }); }) $div.mouseout(function (event) { $(this).css({ "background": "blue", }); })
4. 鼠標進入和離開(進入子元素不觸發)ide
$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", }); })
6. 鼠標按下和鬆開
$div = $("div") $div.mousedown(function (event) { $(this).css({ "background": "blue", }); console.log(event); }) $div.mouseup(function (event) { $(this).css({ "background": "blue", }); console.log(event); })
7. mousemove() 鼠標在元素內部移動
*keypress():按下鍵盤(指的是按下)
$(window).keypress([20],function (event) { $div.css({ "background": "blue", }); console.log(event.which); })
注意:若是按下不放開,事件會連續觸發。
*按下和鬆開
$(window).keydown([20],function (event) { $div.css({ "background": "blue", }); console.log(event); }) $(window).keyup([20],function (event) { $div.css({ "background": "blue", }); console.log(event); })
* 元素獲取和失去焦點
$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", }) })//失去焦點後觸發事件
* submit(): 用戶遞交表單
$(".form").submit(function (event) { alert("提交事件"); console.log(event); //阻止系統默認事件 event.defaultPrevented(); return false; })
* ready():DOM加載完成後執行
* resize():瀏覽器窗口的大小發生改變觸發事件
$(window).resize(function () { console.log($(window).width()); })
* 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');解綁指定事件 }); });
* on():綁定和委託均可用的方法
$("div").on(event,childSelector,data,function); //四個參數 $(function(){ $('div').on('mouseover click', function(event) { $(this).css({ "background": "blue", }); }); });
* 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");
1. 事件的冒泡:
注意:冒泡是事件的固有屬性(自定義不適用),適合全部的系統事件。
$(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>
擴展:合併阻止操做
event.stopPropagation();//阻止冒泡 event.preventDefault();//阻止默認行爲 // 合併寫法: return false;
2. 事件委託
定義:
利用冒泡原理,將要處理相同事件的子元素的事件委託給父級,從而極大減小事件綁定的次數,提升性能。
委託事件:
$(function(){ $list = $('list'); $list.delegate('li', 'click', function(event) { $(this).css({background:'red'}); }); })//給列表下面的每一個li元素的事件委託給list列表。
參數:第一個參數是須要委託的元素,採用css選擇器的寫法,默認從一級子元素開始;第二個參數時要委託的事件,能夠是多個,之間用空格隔開,第三個參數是處理函數。
event指觸發事件的那個對象。
$(function(){ $list = $('list'); $list.on('click', 'li', function(event) { $(this).css({background:'red'}); }); })//給列表下面的每一個li元素的事件委託給list列表。
參數:
$(function(){ $('div').one('click',"li" function(event) { $(this).css({ "background": "blue", }); }); });
說明:參數用法和on事件同樣。
取消委託
$list.undelegate();//選擇器找到委託對象取消委託
off():
$list.off("click","li");
總結:
補充實例:
動態給ul添加li標籤的時候,li標籤原來已經綁定了click事件,但新添加的標籤click不起做用,那麼須要委託綁定delegate()
click和bind是提早綁定,delegate()是當單擊標籤的時候才綁定的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input class="btn" type="button" value="添加"> <ul> <li>11</li> <li>22</li> <li>33</li> </ul> <script src="jquery.js"></script> <script> $(function () { $(".btn").click(function () { $("ul").append("<li>88</li>") }); $("li").click(function () { alert('123') }) }); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input class="btn" type="button" value="添加"> <ul> <li>11</li> <li>22</li> <li>33</li> </ul> <script src="jquery.js"></script> <script> $(function () { $(".btn").click(function () { $("ul").append("<li>88</li>") }); $("ul").delegate('li','click',function () { //將全部的li標籤委託綁定給ul alert('123') }) }); </script> </body> </html>