-
過一下index.html就行查看全部
-
index.html的執(zhí)行結(jié)果有待通過后邊的課程分析一下查看全部
-
內(nèi)部冒泡與外部冒泡獨立處理,相互不會影響,但是又有千絲萬縷的關(guān)系??? 初看 trigger 源碼部分真有點暈,處理的 hack 太多了: 命名空間的過濾 模擬事件對象 制作一個觸發(fā)的路徑隊列eventPath 對 eventPath 進(jìn)行模擬冒泡的觸發(fā) 在一個層級調(diào)用 dispatch 處理各自的內(nèi)部事件關(guān)系(委托)查看全部
-
while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) { event.currentTarget = matched.elem; j = 0; while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) { ret = handleObj.handler.apply(matched.elem, args); //如果返回了false if (ret !== undefined) { if ((event.result = ret) === false) { event.preventDefault(); event.stopPropagation(); } 總的來說 jQuery.event.handlers 做的事情: 將有序地返回當(dāng)前事件所需執(zhí)行的所有事件處理程序。 這里的事件處理程序既包括直接綁定在該元素上的事件處理程序,也包括利用冒泡機(jī)制委托在該元素的事件處理程序(委托機(jī)制依賴于 selector)。 在返回這些事件處理程序時,委托的事件處理程序相對于直接綁定的事件處理程序在隊列的更前,委托層次越深,該事件處理程序則越靠前。查看全部
-
那么事件的執(zhí)行就需要有個先后,jQuery要如何排序呢? 依賴委托節(jié)點在 DOM 樹的深度安排優(yōu)先級,委托的 DOM 節(jié)點層次越深,其執(zhí)行優(yōu)先級越高,委托的事件處理程序相對于直接綁定的事件處理程序在隊列的更前面,委托層次越深,該事件處理程序則越靠前。 index.html執(zhí)行結(jié)果: test 委托到p觸發(fā) 被阻止了 mousedown body查看全部
-
總的來說 jQuery.event.fix 做的事情: 1.將原生的事件對象 event 修正為一個新的可寫 event 對象,并對該 event 的屬性以及方法統(tǒng)一接口 2.該方法在內(nèi)部調(diào)用了 jQuery.Event(event) 構(gòu)造函數(shù)查看全部
-
如上結(jié)構(gòu),currentTarget 是 aaron 的 div 元素 , target 是 p 元素,事件對象是有作用域的 currentTarget 是等于 this 的。 事件對象的基礎(chǔ)大家都是知道了,jQuery為了實現(xiàn)統(tǒng)一的事件對象調(diào)用與委托的的處理,將事件對象單獨重寫,這樣如果用戶做了任何的行為處理,jQuery 內(nèi)部都能獲取到狀態(tài)值,從而用來處理同一個元素綁定多個模擬事件的判斷處理。這也是重寫后的一個重要意義。查看全部
-
某些事件類型的有特殊行為和屬性,換句話說就是某些事件不是大眾化的事件不能一概處理。此時就需要用到Special Event機(jī)制了。如果有興趣更多了解,可以看一下index.html jQuery.event.add 方法在第一次初始化處理器的時候,會檢查是否為自定義事件,如果存在則將會把控制權(quán)限交給自定義事件的事件初始化函數(shù),同樣事件卸載的 jQuery.event.remove 方法在刪除處理器前也會檢查此處。查看全部
-
本節(jié)在index.html中通過special模擬了input 和 textarea事件查看全部
-
本節(jié)學(xué)習(xí),一個是下邊總結(jié)的結(jié)構(gòu),另一個是index.html的注釋 理解 jQuery.event.add 代碼結(jié)構(gòu): 第一步:獲取數(shù)據(jù)緩存 -> elemData = data_priv.get( elem ); 第二步:創(chuàng)建編號 -> handler.guid= jQuery.guid++; 主要目的是用來尋找或者刪除handler,因為這個東東是緩存在緩存對象上的,沒有直接跟元素節(jié)點發(fā)生關(guān)聯(lián)。 第三步:給緩存增加事件處理句柄 -> events,eventHandle 都是 elemData 緩存對象內(nèi)部的 1. 一個是 events,是jQuery內(nèi)部維護(hù)的事件列隊 2. 一個是 handle,是實際綁定到elem中的事件處理函數(shù) 之后的代碼無非就是對這 2 個對象的篩選、分組、填充了。 第四步: 填充事件名(events)與事件句柄(handle) 通過那個圖片的內(nèi)容取理解,那個圖片非常到位查看全部
-
本節(jié)學(xué)習(xí),一個是下邊總結(jié)的結(jié)構(gòu),另一個是index.html的注釋 理解 jQuery.event.add 代碼結(jié)構(gòu): 第一步:獲取數(shù)據(jù)緩存 -> elemData = data_priv.get( elem ); 第二步:創(chuàng)建編號 -> handler.guid= jQuery.guid++; 第三步:給緩存增加事件處理句柄 1. 一個是 events,是jQuery內(nèi)部維護(hù)的事件列隊 2. 一個是 handle,是實際綁定到elem中的事件處理函數(shù) 之后的代碼無非就是對這 2 個對象的篩選、分組、填充了。 第四步: 填充事件名(events)與事件句柄(handle) 通過那個圖片的內(nèi)容取理解,那個圖片非常到位查看全部
-
本節(jié)學(xué)習(xí)方法: index.html代碼理解清楚了,上邊現(xiàn)在注釋補(bǔ)的也差不多了。 左邊文檔大概過一下,知道說的什么,然后接著往下看。查看全部
-
$('#element).delegate('a', 'click', function() { alert("!!!") }); 任何時候只要有事件冒泡到$(‘#element)上,它就查看該事件是否是click事件,以及該事件的目標(biāo)元素是否與CCS選擇器相匹配。如果兩種檢查的結(jié)果都為真的話,它就執(zhí)行函數(shù)。 可以注意到,這一過程與.live()類似,但是其把處理程序綁定到具體的元素而非document這一根上。那么 (′a′).live()==(document).delegate('a') 總結(jié) 在下列情況下,應(yīng)該使用 .live()或 .delegate(),而不能使用 .bind(): 1. 為DOM中的很多元素綁定相同事件; 2. 為DOM中尚不存在的元素綁定事件; 3. 用.bind()的代價是非常大的,它會把相同的一個事件處理程序hook到所有匹配的DOM元素上 4. 不要再用.live()了,它已經(jīng)不再被推薦了,而且還有許多問題 5. .delegate()會提供很好的方法來提高效率,同時我們可以添加事件處理方法到動態(tài)添加的元素上 我們可以用.on() 來代替上述的 3 種方法。 不足點也是有的: 1. 并非所有的事件都能冒泡,如load, change, submit, focus, blur 2. 加大管理復(fù)雜 3. 不好模擬用戶觸發(fā)事件 4. 如何取舍就看項目實際中運用了查看全部
-
事件委托就是事件目標(biāo)自身不處理事件,而是把處理任務(wù)委托給其父元素或者祖先元素,甚至根元素(document) 事件傳送可以分為3個階段。 (1)在事件捕捉(Capturing)階段,事件將沿著DOM樹向下轉(zhuǎn)送,目標(biāo)節(jié)點的每一個祖先節(jié)點,直至目標(biāo)節(jié)點。例如,若用戶單擊了一個超鏈接,則該單擊事件將從document節(jié)點轉(zhuǎn)送到html元素,body元素以及包含該鏈接的p元素。在此過程中,瀏覽器都會檢測針對該事件的 捕獲事件監(jiān)聽器,并運行這個 捕獲事件監(jiān)聽器。 (2)在目標(biāo)(target)階段,瀏覽器在查找到已經(jīng)指定給目標(biāo)事件的事件監(jiān)聽器之后,就會運行該事件監(jiān)聽器。目標(biāo)節(jié)點就是觸發(fā)事件的 DOM 節(jié)點。例如,如果用戶單擊一個超鏈接,那么該鏈接就是目標(biāo)節(jié)點(此時的目標(biāo)節(jié)點實際上是超鏈接內(nèi)的文本節(jié)點)。 (3)在冒泡(Bubbling)階段,事件將沿著DOM樹向上轉(zhuǎn)送,再次逐個訪問目標(biāo)元素的祖先節(jié)點到document節(jié)點。該過程中的每一步。瀏覽器都將檢測那些不是捕捉事件監(jiān)聽器的事件監(jiān)聽器,并執(zhí)行它們。查看全部
-
我們參考右邊的代碼,整個流程如下: 分解類型,jQuery對象,節(jié)點對象,文本,字符串,腳本 引入nodes收集各種分解的類型數(shù)據(jù) 針對html節(jié)點,兼容IE的處理,先過濾空白,然后補(bǔ)全tr,td等 創(chuàng)建文檔碎片的div包含節(jié)點,把html結(jié)構(gòu)給innerHTML進(jìn)去 取出創(chuàng)建的節(jié)點,jQuery.merge(nodes, tmp.childNodes),因為靠div包裝過查看全部
舉報
0/150
提交
取消