jquery繫結事件 bind和on的區別
阿新 • • 發佈:2018-11-09
bind和on都是給元素繫結事件用的,其最大的區別就是事件冒泡
事件冒泡也是委託事件的原型,事件委託就是子類的事情委託給父類的去做
最直觀的區別就是on繫結比bind繫結多一個引數'childSelector'
語法
$(selector).on(event,childSelector,data,function)
引數 | 描述 |
---|---|
event | 必需。規定要從被選元素移除的一個或多個事件或名稱空間。 由空格分隔多個事件值,也可以是陣列。必須是有效的事件。 |
childSelector | 可選。規定只能新增到指定的子元素上的事件處理程式(且不是選擇器本身,比如已廢棄的 delegate() 方法)。 |
data | 可選。規定傳遞到函式的額外資料。 |
function | 可選。規定當事件發生時執行的函式。 |
$(selector).bind(event,data,function,map)
引數 | 描述 |
---|---|
event | 必需。規定新增到元素的一個或多個事件。 由空格分隔多個事件值。必須是有效的事件。 |
data | 可選。規定傳遞到函式的額外資料。 |
function | 必需。規定當事件發生時執行的函式。 |
map | 規定事件對映 ({event:function, event:function, ...}),包含要新增到元素的一個或多個事件,以及當事件發生時執行的函式。 |
- bind只能給符合條件的元素本身新增事件
- on可以將子元素的事件委託給父元素進行處理,而且可以給動態新增的元素加上繫結事件
也就是對於新新增的元素如果是on繫結,符合條件的新元素也會繫結事件,
如果是bind則不影響新元素
比如下例:
<ul> <li>第一個子元素<li/> <li>第二個子元素<li/> <li>第三個子元素<li/> </ul>
我們想給所有li新增click事件,可以用on:
$('ul').on('click','li', function () {
console.log($(this).text());
});
也可以用bind:
$('ul li').bind('click', function () {
console.log($(this).text());
});
有什麼區別呢?
第一用on繫結實際上是委託給了父級ul,也就是隻給 一個元素綁定了事件
第二個是用選擇器選擇了ul下的所有li元素 依次綁定了事件
假如有很多很多子元素區別就很大了, bind會嚴重影響效能!
假如這時候新添一個li:
$('ul').append('<li>第四個子元素<li>');
如果是on繫結則這個li也會有點選事件
如果是bind則沒有