jQuery事件處理機制能幫我們處理那些問題?
毋容置疑首先要解決瀏覽器事件兼容問題:
1. 可以在一個事件類型上添加多個事件處理函數(shù),可以一次添加多個事件類型的事件處理函數(shù) 2. 提供了常用事件的便捷方法 3. 支持自定義事件 4. 擴展了組合事件 5. 提供了統(tǒng)一的事件封裝、綁定、執(zhí)行、銷毀機制
……
為了更深入的理解幕后的實現(xiàn),所以先整理整體的結(jié)構(gòu)思路,從1.7后就去除了 live 綁定,所以現(xiàn)在的整個事件的 API
如圖:
jQuery的事件綁定有多個方法可以調(diào)用,以 click 事件來舉例:
$('#foo').click(function(){ }) $('#foo').bind('click',function(){ }) $("foo").delegate("td", "click", function() { }) $("foo").on("click", "td", function() { })
click,bind,delegate,on方法,以上四種綁定都能達到同一樣的效果,但是各自又有什么區(qū)別,內(nèi)部又是如何實現(xiàn)?
源碼分析:
click方式
jQuery.fn[ 'click' ] = function( data, fn ) { return arguments.length > 0 ? this.on( name, null, data, fn ) : this.trigger( name ); };
源碼很簡單,合并15種事件統(tǒng)一增加到j(luò)Query.fn上,內(nèi)部調(diào)用this.on / this.trigger。
bind方式
bind: function( types, data, fn ) { return this.on( types, null, data, fn ) }
同樣調(diào)用的this.on/this.off。
delegate方式
delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn ) }
同樣調(diào)用的this.on/this.off。
one方式
one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ) }
可見以上的接口只是修改了不同的傳遞參數(shù),最后都交給 on 實現(xiàn)的。
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報