溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于jquery中的bind()、live()、delegate()的區(qū)別分析淺析

發(fā)布時間:2020-06-24 16:52:05 來源:網(wǎng)絡 閱讀:699 作者:web郭樂 欄目:web開發(fā)

近來在研究JS的時候,小碼哥又一次看到jquery中常見的幾種綁定事件的方法:bind(),live(),delegate()。因此,閑來無事,想把他們幾個做一下系統(tǒng)的分析,一遍后面的碼農(nóng)們能夠一起分享!

先說好,鄙人也算是JS的初學者,很復雜的模塊啥的,也是略懂而已,要是有碼神看到,可別Ma我哈!!

那好,下面就直接進入主題了~

首先,分別介紹一下這三個方法:

1、bind()——$(selector).bind(event,data,function);

    event 為必需,規(guī)定添加到元素上的一個或多個事件,由空格分隔多個事件,必需是有效事件

    data  可選,規(guī)定傳遞到函數(shù)的額外數(shù)據(jù),一般用不到

    function  必需,規(guī)定當事件發(fā)生時運行的函數(shù)。

實例:

    $("button").bind("click",function(){

        $("p"),slideToggle();//slideToggle()方法是鼠標點擊切換

    })

還可以對同一個元素添加多個事件:$(selector).bind(event:function,event:function,....);

    $(document).ready(function(){

        $("button").bind(click:function(){

            $("p").slideToggle();

        },

        mouseover:function(){

            $("body").css({'background','red';})

        },

        mouseout:function(){

            $("body").css('background','#fff');

        });

    });

2、live()——$(selector).live(event,data,function);

    event 為必需,規(guī)定添加到元素上的一個或多個事件,由空格分隔多個事件,必需是有效事件

    data  可選,規(guī)定傳遞到函數(shù)的額外數(shù)據(jù),一般用不到

    function  必需,規(guī)定當事件發(fā)生時運行的函數(shù)。

實例:

    $("button").live("click",function(){

        $("p").slideToggle();

    })

    live()方法有一個好處就是可以為HTML還不存在(即由JS腳本臨時創(chuàng)建的新元素上添加事件)

3、delegate()——$(selector).delegate(childSelector,event,data,function);

    childSelector  必需,規(guī)定要附加事件處理程序的一個或多個子元素。

    event  必需,規(guī)定附加到元素上的一個或多個事件。

    由空格分隔多個事件值,必需是有效事件。

    data 可選,規(guī)定傳遞到函數(shù)的額外數(shù)據(jù)。

    function 必需,規(guī)定當事件發(fā)生時運行的函數(shù)。

    delegate()方法同樣可以為HTML還不存在(即由JS腳本臨時創(chuàng)建的新元素上添加事件)。

實例:

    $('div').delegate('button','click',function(){

        $("p").slideToggle();

    })

下面就來分析一下他們的異同:

首先,單看簡單的針對某個元素進行事件綁定,他們之間貌似沒有多少區(qū)別,都可以實現(xiàn)簡單的事件綁定,且他們都是遵循事件冒泡(事件傳播)方式查詢要綁定事件的元素。

但bind()方法,卻不能像live()和delegate()方法那樣,為未來(即由JS腳本新生成和創(chuàng)建的元素)添加事件綁定。bind()方法只能對HTML中已經(jīng)存在的元素添加綁定事件。

live()方法有一個最大的缺點,就是它僅能針對直接的CSS選擇器做操作,這使得它變得非常不靈活。

在live()和delegate()之間,唯一的差別就在于它們在對要綁定事件的元素的獲取速度上有差異。在事件傳播上,后者要比前者的速度更快一點,只因后者的限制條件更精準一些。這可以從它們的綁定事件的結構來看出來。

鑒于以上分析,我們更傾向于live()和delegate()方法。而這兩者,有傾向與后者。

但,對于停止事件傳播來說,bind()方法會高效而直接。因此,我們平時用來阻止事件傳播時,會選擇bind()方法:

$('a').bind('click',function(e){

    e.preventDefault();

    e.stopPropagation();

});

只因其他兩種方法由于事件冒泡而耽誤了時間。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI