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