jQuery中.on()參數(shù)的實(shí)現(xiàn)示例
.on() 是 jQuery 通用事件綁定方法,支持普通綁定、事件委托、傳參、命名空間等,下面分標(biāo)準(zhǔn)語法、參數(shù)、重載形式、示例、解綁逐一說明。
一、完整語法格式
1. 基礎(chǔ)通用語法
$(selector).on( events [, selector ] [, data ] , handler );
參數(shù)按順序:事件名、子選擇器、自定義數(shù)據(jù)、回調(diào)函數(shù),后三個都是可選。
二、逐個參數(shù)詳解
1.events(必選)
字符串,指定要綁定的事件名稱,多個事件用空格分隔。
- 支持原生事件:click、dblclick、mouseover、mouseout、keydown、change、submit 等
- 支持自定義事件
- 支持事件命名空間(用于精準(zhǔn)解綁)
示例:
// 單個事件
$(".box").on("click", function(){});
// 多個事件(空格分隔)
$(".box").on("click mouseover", function(){});
// 事件 + 命名空間(click.my)
$(".box").on("click.my", function(){});
2.selector(可選,核心:事件委托)
字符串,CSS 選擇器。
- 不填:普通綁定,僅對當(dāng)前已存在的元素生效
- 填寫:開啟事件委托,綁定在父元素,兼容動態(tài)新增的子元素
原理
利用事件冒泡:事件實(shí)際綁定在父元素,觸發(fā)時判斷來源是否匹配該選擇器。
示例
<div id="parent"> <!-- 靜態(tài)/動態(tài) button 都能觸發(fā) --> </div>
// 父元素 #parent 綁定,委托給子元素 button
$("#parent").on("click", "button", function(){
console.log("按鈕被點(diǎn)擊");
});
// 后續(xù)動態(tài)創(chuàng)建的按鈕依然有效
$("#parent").append("<button>動態(tài)按鈕</button>");
關(guān)鍵點(diǎn):委托寫法是 父元素.on(事件, 子選擇器, 回調(diào))
3.data(可選,事件傳參)
任意類型(字符串/對象/數(shù)組),綁定事件時預(yù)先傳入數(shù)據(jù),在回調(diào)中通過 event.data 獲取。
語法:
.on(events, selector, data, handler) // 無委托時:.on(events, data, handler)
示例:
// 傳對象參數(shù)
let msg = { name: "測試", id: 1001 };
$(".btn").on("click", msg, function(e){
console.log(e.data.name); // 測試
console.log(e.data.id); // 1001
});
4.handler(必選,回調(diào)函數(shù))
事件觸發(fā)時執(zhí)行的函數(shù)。
- 函數(shù)第一個參數(shù):事件對象 event
- this 指向觸發(fā)事件的 DOM 原生元素(不是 jQuery 對象)
- 可通過 $(this) 轉(zhuǎn)為 jQuery 對象使用
示例:
$(".btn").on("click", function(e){
console.log(e.type); // 事件類型:click
$(this).css("color","red"); // 當(dāng)前點(diǎn)擊元素變色
});
三、四種常用重載形式(按使用場景分類)
形式1:最簡綁定(無委托、無傳參)
適用于靜態(tài)元素
// 語法:on( events, handler )
$(".btn").on("click", function(){});
形式2:帶傳參(無委托)
// 語法:on( events, data, handler )
$(".btn").on("click", {tip:"提示"}, function(e){});
形式3:事件委托(最常用,動態(tài)元素必備)
// 語法:on( events, selector, handler )
$("#parent").on("click", ".child", function(){});
形式4:委托 + 傳參(完整全參數(shù))
// 語法:on( events, selector, data, handler )
$("#parent").on("click", ".child", {id:1}, function(e){});
四、高級用法
1. 事件命名空間(精準(zhǔn)解綁)
給事件加命名空間,解綁時只刪指定命名空間事件,不影響其他同類型事件。
// 綁定命名空間 click.a
$(".btn").on("click.a", function(){ alert("A事件"); });
$(".btn").on("click.b", function(){ alert("B事件"); });
// 只解綁 click.a,click.b 保留
$(".btn").off("click.a");
2. 綁定自定義事件
可以手動觸發(fā)自定義事件:
// 綁定自定義事件 myEvent
$(".box").on("myEvent", function(){
alert("自定義事件觸發(fā)");
});
// 手動觸發(fā)
$(".box").trigger("myEvent");
3. 一次性 事件(執(zhí)行一次后自動解綁)
搭配 .one(),語法和 .on() 一致,只觸發(fā) 1 次:
$(".btn").one("click", function(){
alert("只彈一次");
});
五、配套:.off()解綁(和.on()成對使用)
1. 解綁所有事件
$(".btn").off();
2. 解綁指定事件
// 解綁所有 click 事件
$(".btn").off("click");
3. 解綁委托事件
// 解綁父元素上委托給 .child 的 click
$("#parent").off("click", ".child");
4. 解綁命名空間事件
$(".btn").off("click.a");
六、關(guān)鍵總結(jié) & 避坑
- 參數(shù)順序不能亂 固定順序:事件名 → 子選擇器(委托) → 自定義數(shù)據(jù) → 回調(diào)
- 動態(tài) DOM 必用委托 頁面后添加的元素,直接綁 $(".動態(tài)元素").on() 會失效,必須綁父元素 + 子選擇器。
- this 指向 回調(diào)里 this 是原生 DOM,要用 jQuery 方法必須寫 $(this)。
- 多事件綁定 多個事件空格隔開,共享同一個回調(diào)。
- 傳參取值 外部傳入的數(shù)據(jù),統(tǒng)一從 event.data 獲取。
七、速查卡片
| 寫法 | 適用場景 |
|---|---|
| .on("click", fn) | 靜態(tài)元素單擊 |
| .on("click mouseover", fn) | 多個事件共用回調(diào) |
| 父.on("click", "子", fn) | 動態(tài)元素、事件委托(項(xiàng)目高頻) |
| .on("click", data, fn) | 事件需要外部傳參 |
| .on("click.xxx", fn) | 需要精準(zhǔn)解綁,使用命名空間 |
到此這篇關(guān)于jQuery中.on()參數(shù)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)jQuery .on()參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jquery教程限制文本框只能輸入數(shù)字和小數(shù)點(diǎn)示例分享
這篇文章主要介紹了JQuery限制文本框只能輸入數(shù)字和小數(shù)點(diǎn)的方法,大家參考使用吧2014-01-01
推薦6款基于jQuery實(shí)現(xiàn)圖片效果插件
這里給大家匯總了一下個人比較常用的基于jQuery實(shí)現(xiàn)的圖片特效的插件,個人感覺非常不錯,這里分享給大家2014-12-12
jquery bind(click)傳參讓列表中每行綁定一個事件
用jquey bind 點(diǎn)擊事件時,傳參不注意可能會導(dǎo)致點(diǎn)擊每一行都是顯示相同內(nèi)容的情況,下面有個示例,感興趣的朋友可以參考下2014-08-08

