3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【原创】jQuery1.8.2源码解析之jQuery.event

發布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原创】jQuery1.8.2源码解析之jQuery.event 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本片隨筆主要是分析了下jQuery的事件模型,即如何統一事件對象,以及處理過程。

這里簡要說明一下幾點:

jQuery通過統一的方法(第62行),eventHandle函數進行事件的分發,利用jQuery.Event統一修正了瀏覽器的event對象,注冊事件處理器時,也是注冊eventHandle,

然后統一將相關的事件信息,存儲在與dom相聯系的jQuery.cache緩存中,如下圖:

值得注意的還有事件代理和trigger的實現:

(1)事件代理是個很不錯的想法,利用了事件冒泡,在父元素上綁定事件,jQuery通過selector與事件處理器handle的selector進行匹配,從而達到代理的作用,

  另外,一個元素綁定的事件處理器分為兩種:自身綁定的事件處理器 和 子元素綁定的代理事件處理器,顯然為了體現冒泡(子元素可能阻止冒泡),當該元素上的某個事件觸發時

  它的代理事件處理器是要先執行,之后再執行自身的事件處理器。對于live事件而言就是事件代理,與delegate不同的是,它默認是綁定在document上了(如果沒有指定context的話)。

(2)trigger主動觸發事件,jQuery在trigger上同樣很好的實現了事件冒泡,還有元素默認操作

最后:本文主要是介紹和分析原理,對代碼主干進行源碼解析,對于一些IE兼容性的處理,沒有做過多分析,下面是源碼分析(中英文注釋):

1 var rformElems = /^(?:textarea|input|select)$/i, 2 rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, 3 rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, 4 rkeyEvent = /^key/, 5 rmouseEvent = /^(?:mouse|contextmenu)|click/, 6 rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 7 hoverHack = function( events ) { 8 return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); 9 }; 10 11 /* 12 * Helper functions for managing events -- not part of the public interface. 13 * Props to Dean Edwards' addEvent library for many of the ideas. 14 */ 15 jQuery.event = { 16 17 add: function( elem, types, handler, data, selector ) { 18 19 var elemData, eventHandle, events, 20 t, tns, type, namespaces, handleObj, 21 handleObjIn, handlers, special; 22 23 // Don't attach events to noData or text/comment nodes (allow plain objects tho) 24 // 以下條件滿足一個則退出事件綁定: 25 // 是文本節點和注釋節點 26 // types為空 27 // hander為空 28 // 內部緩存數據(pvt為true) 29 if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { 30 return; 31 } 32 33 // Caller can pass in an object of custom data in lieu of the handler 34 // 調用這可以傳遞一個自定義數據來代替handler(事件處理器) 35 // 自定義數據類似: 36 // { 37 // handler : fn 38 // ,selector : '...' 39 // } 40 if ( handler.handler ) { 41 handleObjIn = handler; 42 handler = handleObjIn.handler; 43 selector = handleObjIn.selector; 44 } 45 46 // Make sure that the handler has a unique ID, used to find/remove it later 47 // 如果改事件處理器沒有guid(沒有被添加過),那么給它添加guid,便于之后的查找和刪除 48 // jQuery.guid從1開始計算 49 if ( !handler.guid ) { 50 handler.guid = jQuery.guid++; 51 } 52 53 // Init the element's event structure and main handler, if this is the first 54 // 初始化內部數據events 55 events = elemData.events; 56 if ( !events ) { 57 elemData.events = events = {}; 58 } 59 // 初始化內部數據handle,handle將成為所有事件觸發時的處理函數 60 eventHandle = elemData.handle; 61 if ( !eventHandle ) { 62 elemData.handle = eventHandle = function( e ) { 63 // Discard the second event of a jQuery.event.trigger() and 64 // when an event is called after a page has unloaded 65 return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 66 jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : 67 undefined; 68 }; 69 // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events 70 // 將elem作為eventHandle的屬性存儲,用來避免IE中非本地事件的內存泄漏 71 eventHandle.elem = elem; 72 } 73 74 // Handle multiple events separated by a space 75 // jQuery(...).bind("mouseover mouseout", fn); 76 // hoverHack(...)將hover事件解釋成mouseenter和mouseleave兩個事件 77 // 去除字符串前后的的空格,并拆分成事件類型數組 78 types = jQuery.trim( hoverHack(types) ).split( " " ); 79 for ( t = 0; t < types.length; t++ ) { 80 81 tns = rtypenamespace.exec( types[t] ) || []; 82 // 事件類型 83 type = tns[1]; 84 // 命名空間(值可能為undefined) 85 // 多級命名空間(其實沒所謂的多級),排序 86 namespaces = ( tns[2] || "" ).split( "." ).sort(); 87 88 // If event changes its type, use the special event handlers for the changed type 89 // 特殊的事件需要進行特殊處理,比如focus,blur等 90 special = jQuery.event.special[ type ] || {}; 91 92 // If selector defined, determine special event api type, otherwise given type 93 // 如果selector有值,則表示適用代理 94 type = ( selector ? special.delegateType : special.bindType ) || type; 95 96 // Update special based on newly reset type 97 special = jQuery.event.special[ type ] || {}; 98 99 // handleObj is passed to all event handlers 100 // 每一個事件處理器都對應存儲著一個handleObj 101 // type與oriType肯能不同,比如oriType為mouseenter,type為mouseover 102 // 這里extend了handleObjIn,這意味著使用者可以在傳遞進來的handle里大做文章,存儲自定義的數據。 103 handleObj = jQuery.extend({ 104 type: type, // fix后的事件類型 105 origType: tns[1], // 原始的事件類型 106 data: data, // 傳遞進來的數據 107 handler: handler, // 事件處理器 108 guid: handler.guid, // 事件處理器的唯一id 109 selector: selector, // 代理事件處理器需要的選擇器,用來過濾 110 namespace: namespaces.join(".") //命名空間(經過排序) 111 }, handleObjIn ); 112 113 // Init the event handler queue if we're the first 114 // 獲取type事件下的所有handler(array) 115 handlers = events[ type ]; 116 // 如果為空,進行第一次初始化 117 if ( !handlers ) { 118 handlers = events[ type ] = []; 119 // handlers中作為代理的個數 120 handlers.delegateCount = 0; 121 122 // Only use addEventListener/attachEvent if the special events handler returns false 123 // 特殊事件需要用setup進行特殊處理,如:focusin,focusout等(后面有處理) 124 if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 125 // Bind the global event handler to the element 126 // 將事件統一綁定到eventHandle,統一接口。 127 // 采用冒泡,與ie兼容 128 if ( elem.addEventListener ) { 129 elem.addEventListener( type, eventHandle, false ); 130 131 } else if ( elem.attachEvent ) { 132 elem.attachEvent( "on" + type, eventHandle ); 133 } 134 } 135 } 136 137 if ( special.add ) { 138 special.add.call( elem, handleObj ); 139 140 if ( !handleObj.handler.guid ) { 141 handleObj.handler.guid = handler.guid; 142 } 143 } 144 145 // Add to the element's handler list, delegates in front 146 if ( selector ) { 147 // 將事件代理處理器添加到handlers的最前面,方便之后代理處理器優先執行,用的很巧妙 148 handlers.splice( handlers.delegateCount++, 0, handleObj ); 149 } else { 150 // 普通事件處理器添加到依次push到handler list中 151 handlers.push( handleObj ); 152 } 153 154 // Keep track of which events have ever been used, for event optimization 155 // 記錄哪些事件曾將使用過,為了事件的優化 156 jQuery.event.global[ type ] = true; 157 } 158 159 // Nullify elem to prevent memory leaks in IE 160 // 去除elem的引用,防止ie內存泄露 161 elem = null; 162 }, 163 164 global: {}, 165 166 // Detach an event or set of events from an element 167 remove: function( elem, types, handler, selector, mappedTypes ) { 168 169 var t, tns, type, origType, namespaces, origCount, 170 j, events, special, eventType, handleObj, 171 elemData = jQuery.hasData( elem ) && jQuery._data( elem ); 172 173 if ( !elemData || !(events = elemData.events) ) { 174 return; 175 } 176 177 // Once for each type.namespace in types; type may be omitted 178 types = jQuery.trim( hoverHack( types || "" ) ).split(" "); 179 for ( t = 0; t < types.length; t++ ) { 180 tns = rtypenamespace.exec( types[t] ) || []; 181 type = origType = tns[1]; 182 namespaces = tns[2]; 183 184 // Unbind all events (on this namespace, if provided) for the element 185 // 如果types為'.mynamespace.hello'時,type此時就為空,那么刪除該命名空間下的所有事件 186 if ( !type ) { 187 for ( type in events ) { 188 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 189 } 190 continue; 191 } 192 193 special = jQuery.event.special[ type ] || {}; 194 // 修正type 195 type = ( selector? special.delegateType : special.bindType ) || type; 196 // 該type(事件類型)下的所有函數處理器handleObj(array) 197 eventType = events[ type ] || []; 198 origCount = eventType.length; 199 // 動態生成正則表達式,匹配命名空間 200 namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; 201 202 // Remove matching events 203 // 遍歷handleObj list查找匹配的handler,并執行刪除操作 204 // mappedTypes 暫時不知道何用,應該是內部控制吧 205 for ( j = 0; j < eventType.length; j++ ) { 206 handleObj = eventType[ j ]; 207 208 // 一系列的邏輯,表示的基本意思如下: 209 // 1. origType === handleObj.origTypes是為了處理jQuery會將mouseenter修正為mouseover這種情況,因為此時mouseenter和mouseover的handleObjs 210 // 會處于同一個集合(對象)里,而它的區別就在于handleObj.oriType,這里做判斷,保證能夠正確刪除mouseenter或者mouseover事件下的事件處理器 211 // 2. 如果handler不存在,那么就當作是刪除該事件下的所有函數處理器,如果存在,則要handler.guid === handleObj.guid保證刪除指定事件 212 // 處理器,因為handler和handleObj是通過guid對應的(一對多的關系,即一個事件處理器可以被同一個事件注冊和調用多次)。 213 // 3. 如果命名空間不存在,那么就忽略命名空間,否則需要進行匹配,這里如果命名空間為多級,只需要其中的一級或多級組合便可以指定其,并刪除。 214 // 如:如果注冊click事件,命名空間是'aa.bb.cc',處理器為fn1,那么'click.aa','click.aa.cc'都是可以用來指定并刪除fn1的(所以說是多級是不合理的)。 215 // 4. 如果selector不存在,那么忽略selector,否則如果存在則尋找selector === handleObj.selector的事件處理器進行刪除,存在一個特殊值'**', 216 // 如果selector為'**',那么刪除所有存在selector的handleObj 217 if ( ( mappedTypes || origType === handleObj.origType ) && 218 ( !handler || handler.guid === handleObj.guid ) && 219 ( !namespaces || namespaces.test( handleObj.namespace ) ) && 220 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { 221 //這里的設計比較好,保整handleObj的正常刪除 222 eventType.splice( j--, 1 ); 223 224 if ( handleObj.selector ) { 225 // 事件代理處理器個數減減 226 eventType.delegateCount--; 227 } 228 if ( special.remove ) { 229 special.remove.call( elem, handleObj ); 230 } 231 } 232 } 233 234 // Remove generic event handler if we removed something and no more handlers exist 235 // (avoids potential for endless recursion during removal of special event handlers) 236 // eventType如果從有到無,那么進行一系列的清除工作,special事件仍然做自己的特殊處理 237 if ( eventType.length === 0 && origCount !== eventType.length ) { 238 if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 239 jQuery.removeEvent( elem, type, elemData.handle ); 240 } 241 // 刪除緩存中events[type] 242 delete events[ type ]; 243 } 244 } 245 246 // Remove the expando if it's no longer used 247 // 如果不存在任何事件處理器,則去除elemData.handle(所有事件的統一事件處理器) 248 if ( jQuery.isEmptyObject( events ) ) { 249 delete elemData.handle; 250 251 // removeData also checks for emptiness and clears the expando if empty 252 // so use it instead of delete 253 // 用jQuery.removeData刪除events,是為了做好清理工作(包括dom上的expando屬性或者普通js對象的expando對象,以及緩存在jQuery.cahe的數據) 254 jQuery.removeData( elem, "events", true ); 255 } 256 }, 257 258 // Events that are safe to short-circuit if no handlers are attached. 259 // Native DOM events should not be added, they may have inline handlers. 260 customEvent: { 261 "getData": true, 262 "setData": true, 263 "changeData": true 264 }, 265 266 // onlyHandlers在調用triggerHandler時使用 267 trigger: function( event, data, elem, onlyHandlers ) { 268 // Don't do events on text and comment nodes 269 // 不處理文本節點和注釋節點 270 if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { 271 return; 272 } 273 274 // Event object or event type 275 var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, 276 277 // 兼容jQuery.Event(object) 和 event(string) 278 type = event.type || event, 279 namespaces = []; 280 281 // focus/blur morphs to focusin/out; ensure we're not firing them right now 282 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 283 return; 284 } 285 286 if ( type.indexOf( "!" ) >= 0 ) { 287 // Exclusive events trigger only for the exact event (no namespaces) 288 type = type.slice(0, -1); 289 exclusive = true; 290 } 291 // 解析命名空間 292 if ( type.indexOf( "." ) >= 0 ) { 293 // Namespaced trigger; create a regexp to match event type in handle() 294 namespaces = type.split("."); 295 type = namespaces.shift(); 296 namespaces.sort(); 297 } 298 299 if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { 300 // No jQuery handlers for this event type, and it can't have inline handlers 301 return; 302 } 303 304 // Caller can pass in an Event, Object, or just an event type string 305 event = typeof event === "object" ? 306 // jQuery.Event object 307 // jQuery.Event或者修正過的event對象 308 event[ jQuery.expando ] ? event : 309 // Object literal 310 // 字面對象,如{type:'click',...} 311 new jQuery.Event( type, event ) : 312 // Just the event type (string) 313 // event(string),如:'click',則創建jQuery.Event對象 314 new jQuery.Event( type ); 315 316 event.type = type; 317 event.isTrigger = true; 318 event.exclusive = exclusive; 319 event.namespace = namespaces.join( "." ); 320 event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; 321 ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; 322 323 // Handle a global trigger 324 if ( !elem ) { 325 326 // TODO: Stop taunting the data cache; remove global events and always attach to document 327 cache = jQuery.cache; 328 for ( i in cache ) { 329 if ( cache[ i ].events && cache[ i ].events[ type ] ) { 330 jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); 331 } 332 } 333 return; 334 } 335 336 // Clean up the event in case it is being reused 337 // 清理event,防止該event正在使用中,有殘留歷史 338 event.result = undefined; 339 if ( !event.target ) { 340 event.target = elem; 341 } 342 343 // Clone any incoming data and prepend the event, creating the handler arg list 344 // 將data轉換為數組 345 data = data != null ? jQuery.makeArray( data ) : []; 346 // 將事件對象插入數組最前面(開始位置),最好將這個數組作為參數傳遞給事件處理函數 347 data.unshift( event ); 348 349 // Allow special events to draw outside the lines 350 special = jQuery.event.special[ type ] || {}; 351 if ( special.trigger && special.trigger.apply( elem, data ) === false ) { 352 return; 353 } 354 355 // Determine event propagation path in advance, per W3C events spec (#9951) 356 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 357 // 用eventPath存儲冒泡路徑[[elem, 'click'], [elemParent, 'click'],...,[window,'click']] 358 eventPath = [[ elem, special.bindType || type ]]; 359 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { 360 361 bubbleType = special.delegateType || type; 362 cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; 363 for ( old = elem; cur; cur = cur.parentNode ) { 364 eventPath.push([ cur, bubbleType ]); 365 old = cur; 366 } 367 368 // Only add window if we got to document (e.g., not plain obj or detached DOM) 369 // 冒泡是一直冒泡到window對象 370 if ( old === (elem.ownerDocument || document) ) { 371 eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); 372 } 373 } 374 375 // Fire handlers on the event path 376 // 依次冒泡調用指定type的事件吃利器 377 for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { 378 379 cur = eventPath[i][0]; 380 event.type = eventPath[i][1]; 381 // 查詢每個元素type類型的事件處理器 382 handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); 383 if ( handle ) { 384 // 這里其實很重要,在進行冒泡的時候,傳遞的是同一個event對象(在data中) 385 // 也就是在這里便可以通過event對象或者return false,隨時停止冒泡 386 handle.apply( cur, data ); 387 } 388 // Note that this is a bare JS function and not a jQuery handler 389 // 處理通過onType屬性添加的事件處理器(如:elem.onClick = function(){...};) 390 // 這里就可以知道trigger的時候onType事件是在通過jquery添加的事件后面執行的 391 handle = ontype && cur[ ontype ]; 392 if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { 393 // 注意這里onType事件處理器的return false只有可能阻止默認行為 394 event.preventDefault(); 395 } 396 } 397 // 修正type,防止事件處理器改變event.type的值 398 event.type = type; 399 400 // If nobody prevented the default action, do it now 401 // 這里主要是用來執行元素的默認操作 402 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 403 404 if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && 405 !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { 406 407 // Call a native DOM method on the target with the same name name as the event. 408 // Can't use an .isFunction() check here because IE6/7 fails that test. 409 // Don't do default actions on window, that's where global variables be (#6170) 410 // IE<9 dies on focus/blur to hidden element (#1486) 411 if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { 412 413 // Don't re-trigger an onFOO event when we call its FOO() method 414 // 假設type為click 415 // 因為下面想通過click()來觸發默認操作,但是又不想執行對應的事件處理器(re-trigger), 416 // 所以需要做兩方面工作: 417 // 首先將elem.onclick = null; 418 // 然后將jQuery.event.triggered = 'click'; 將在入口handle(第62行)不再dispatch了 419 // 之后再將它們還原 420 old = elem[ ontype ]; 421 422 if ( old ) { 423 // 暫時去除事件處理器 424 elem[ ontype ] = null; 425 } 426 427 // Prevent re-triggering of the same event, since we already bubbled it above 428 // 相當于是標記,表示事件處理器已經調用過了 429 jQuery.event.triggered = type; 430 // 再次調用,如elem.click(),(即trigge click)再次冒泡,不過這次執行入口handle,不會執行dispatch之后的代碼了,只為觸發默認操作 431 elem[ type ](); 432 jQuery.event.triggered = undefined; 433 434 if ( old ) { 435 elem[ ontype ] = old; 436 } 437 } 438 } 439 } 440 441 return event.result; 442 }, 443 444 dispatch: function( event ) { 445 446 // Make a writable jQuery.Event from the native event object 447 // event || window.event 兼容標準事件模型和IE事件模型 448 // fix 修正event,返回jQuery.Event對象 449 event = jQuery.event.fix( event || window.event ); 450 451 var i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related, 452 // handle數組 453 handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), 454 // handle中代理的個數 455 delegateCount = handlers.delegateCount, 456 // 瀏覽器傳來的參數,偽數組轉換為真正的數組 457 // args[0]為原生的event對象 458 args = [].slice.call( arguments ), 459 run_all = !event.exclusive && !event.namespace, 460 special = jQuery.event.special[ event.type ] || {}, 461 handlerQueue = []; 462 463 // Use the fix-ed jQuery.Event rather than the (read-only) native event 464 // 修正args[0]。 465 // 因為在IE下,傳入的參數event為undefined,就意味著arguments.length為0,改變event并不會影響arguments,所以arguments仍然為undefined 466 args[0] = event; 467 // 事件代理元素 468 event.delegateTarget = this; 469 470 // Call the preDispatch hook for the mapped type, and let it bail if desired 471 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 472 return; 473 } 474 475 // Determine handlers that should run if there are delegated events 476 // 對于代理處理器,需要進行一定過濾,決定哪些代理處理器可以運行 477 // Avoid non-left-click bubbling in Firefox (#3861) 478 // 火狐瀏覽器右鍵或者中鍵點擊時,會錯誤地冒泡到document的click事件,并且stopPropagation也無效 479 // 故這樣的代理處理器需要避免 480 // 如果存在代理處理器(若是click事件,要求是左鍵觸發的),那么才進行事件代理 481 if ( delegateCount && !(event.button && event.type === "click") ) { 482 483 // Pregenerate a single jQuery object for reuse with .is() 484 // 生成一個jQuery對象,這里的this沒有任何用處,后面會將其dom元素覆蓋,只為之后重復調用is()方法, 485 // 而不必生成新的jQuery對象 486 jqcur = jQuery(this); 487 jqcur.context = this; 488 489 // 從觸發事件的元素開始,一直向根節點搜索匹配selector的元素,并執行事件處理函數 490 for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { 491 492 // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #xxxx) 493 // 不處理元素為disabled的click事件 494 if ( cur.disabled !== true || event.type !== "click" ) { 495 // 匹配的selector的緩存,避免每次調用is()方法進行判斷 496 selMatch = {}; 497 //暫存匹配selector的事件處理器 498 matches = []; 499 // 將其轉換為jQuery對象,后面便可以調用is()方法 500 jqcur[0] = cur; 501 // 遍歷代理handlers,查找匹配它們的selector 502 for ( i = 0; i < delegateCount; i++ ) { 503 handleObj = handlers[ i ]; 504 sel = handleObj.selector; 505 506 if ( selMatch[ sel ] === undefined ) { 507 // 調用is方法,看是否匹配當前元素 508 selMatch[ sel ] = jqcur.is( sel ); 509 } 510 // 如果匹配,那么放入matches里暫存 511 if ( selMatch[ sel ] ) { 512 matches.push( handleObj ); 513 } 514 } 515 if ( matches.length ) { 516 // 將dom元素和對應的代理事件處理器以對象的形式統一添加到handlerQueue(與后面的普通事件處理器是一樣的) 517 handlerQueue.push({ elem: cur, matches: matches }); 518 } 519 } 520 } 521 } 522 523 // Add the remaining (directly-bound) handlers 524 // 將dom元素和對應的普通的事件處理器(非代理)添加到處理隊列(handlerQueue)中去 525 if ( handlers.length > delegateCount ) { 526 handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); 527 } 528 529 // Run delegates first; they may want to stop propagation beneath us 530 // 優先執行代理處理器,因為有可能被代理的元素作為子元素會阻止傳播 531 for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { 532 matched = handlerQueue[ i ]; 533 // 正在觸發事件回調的元素 534 event.currentTarget = matched.elem; 535 // 依次執行改元素對應的事件回調(在沒有立刻阻止傳播的情況下) 536 for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { 537 handleObj = matched.matches[ j ]; 538 539 // Triggered event must either 1) be non-exclusive and have no namespace, or 540 // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). 541 if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { 542 // 注冊事件處理器時傳進來的數據 543 event.data = handleObj.data; 544 // 事件對應的事件處理器對象 545 event.handleObj = handleObj; 546 // 調用事件回調,特殊事件特殊處理 547 ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) 548 .apply( matched.elem, args ); 549 //如果返回值不是undefined,那么賦值到event.result中 550 if ( ret !== undefined ) { 551 event.result = ret; 552 //如果返回值是false,那么阻止冒泡傳播和元素的默認操作 553 if ( ret === false ) { 554 event.preventDefault(); 555 event.stopPropagation(); 556 } 557 } 558 } 559 } 560 } 561 562 // Call the postDispatch hook for the mapped type 563 if ( special.postDispatch ) { 564 special.postDispatch.call( this, event ); 565 } 566 // 返回最后一次事件回調的值 567 return event.result; 568 }, 569 570 // Includes some event props shared by KeyEvent and MouseEvent 571 // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** 572 props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), 573 574 // 所謂hook就是攔截修改的意思 575 fixHooks: {}, 576 577 keyHooks: { 578 props: "char charCode key keyCode".split(" "), 579 filter: function( event, original ) { 580 581 // Add which for key events 582 if ( event.which == null ) { 583 event.which = original.charCode != null ? original.charCode : original.keyCode; 584 } 585 586 return event; 587 } 588 }, 589 590 mouseHooks: { 591 props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), 592 filter: function( event, original ) { 593 var eventDoc, doc, body, 594 button = original.button, 595 fromElement = original.fromElement; 596 597 // Calculate pageX/Y if missing and clientX/Y available 598 if ( event.pageX == null && original.clientX != null ) { 599 eventDoc = event.target.ownerDocument || document; 600 doc = eventDoc.documentElement; 601 body = eventDoc.body; 602 603 event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); 604 event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); 605 } 606 607 // Add relatedTarget, if necessary 608 if ( !event.relatedTarget && fromElement ) { 609 event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; 610 } 611 612 // Add which for click: 1 === left; 2 === middle; 3 === right 613 // Note: button is not normalized, so don't use it 614 if ( !event.which && button !== undefined ) { 615 event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); 616 } 617 618 return event; 619 } 620 }, 621 622 // 修正event,利用統一的jQuery.Event兼容各個瀏覽器 623 fix: function( event ) { 624 // 如果已經fixed過,表明是jQuery.Event,則直接返回 625 if ( event[ jQuery.expando ] ) { 626 return event; 627 } 628 629 // Create a writable copy of the event object and normalize some properties 630 var i, prop, 631 originalEvent = event, 632 fixHook = jQuery.event.fixHooks[ event.type ] || {}, 633 // 如果是key或者mouse事件,添加額外的屬性(props) 634 copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; 635 636 event = jQuery.Event( originalEvent ); 637 638 // 將瀏覽器原生event的屬性賦值到新創建的jQuery.Event對象中去 639 for ( i = copy.length; i; ) { 640 prop = copy[ --i ]; 641 event[ prop ] = originalEvent[ prop ]; 642 } 643 644 // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) 645 // 兼容觸發事件的文檔元素 646 // Safari2下event.target可能為undefined 647 if ( !event.target ) { 648 event.target = originalEvent.srcElement || document; 649 } 650 651 // Target should not be a text node (#504, Safari) 652 // 如果是文本節點,則取其parent 653 if ( event.target.nodeType === 3 ) { 654 event.target = event.target.parentNode; 655 } 656 657 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) 658 event.metaKey = !!event.metaKey; 659 660 return fixHook.filter? fixHook.filter( event, originalEvent ) : event; 661 }, 662 663 special: { 664 load: { 665 // Prevent triggered image.load events from bubbling to window.load 666 noBubble: true 667 }, 668 669 focus: { 670 delegateType: "focusin" 671 }, 672 blur: { 673 delegateType: "focusout" 674 }, 675 676 beforeunload: { 677 setup: function( data, namespaces, eventHandle ) { 678 // We only want to do this special case on windows 679 if ( jQuery.isWindow( this ) ) { 680 this.onbeforeunload = eventHandle; 681 } 682 }, 683 684 teardown: function( namespaces, eventHandle ) { 685 if ( this.onbeforeunload === eventHandle ) { 686 this.onbeforeunload = null; 687 } 688 } 689 } 690 }, 691 692 simulate: function( type, elem, event, bubble ) { 693 // Piggyback on a donor event to simulate a different one. 694 // Fake originalEvent to avoid donor's stopPropagation, but if the 695 // simulated event prevents default then we do the same on the donor. 696 var e = jQuery.extend( 697 new jQuery.Event(), 698 event, 699 { type: type, 700 isSimulated: true, 701 originalEvent: {} 702 } 703 ); 704 if ( bubble ) { 705 jQuery.event.trigger( e, null, elem ); 706 } else { 707 jQuery.event.dispatch.call( elem, e ); 708 } 709 if ( e.isDefaultPrevented() ) { 710 event.preventDefault(); 711 } 712 } 713 }; 714 715 // Some plugins are using, but it's undocumented/deprecated and will be removed. 716 // The 1.7 special event interface should provide all the hooks needed now. 717 jQuery.event.handle = jQuery.event.dispatch; 718 719 // 調用原生的瀏覽器方法注銷事件處理器,做兼容行處理 720 jQuery.removeEvent = document.removeEventListener ? 721 function( elem, type, handle ) { 722 if ( elem.removeEventListener ) { 723 elem.removeEventListener( type, handle, false ); 724 } 725 } : 726 function( elem, type, handle ) { 727 var name = "on" + type; 728 729 if ( elem.detachEvent ) { 730 731 // #8545, #7054, preventing memory leaks for custom events in IE6-8 – 732 // detachEvent needed property on element, by name of that event, to properly expose it to GC 733 if ( typeof elem[ name ] === "undefined" ) { 734 elem[ name ] = null; 735 } 736 737 elem.detachEvent( name, handle ); 738 } 739 }; 740 741 // jQuery為統一event對象而封裝的Event類 742 jQuery.Event = function( src, props ) { 743 // Allow instantiation without the 'new' keyword 744 // 兼容jQuery.Event()實例化Event對象 745 if ( !(this instanceof jQuery.Event) ) { 746 return new jQuery.Event( src, props ); 747 } 748 749 // jQuery.Event object 或者 瀏覽器的Event object 750 if ( src && src.type ) { 751 // 存儲原先的Event對象 752 this.originalEvent = src; 753 this.type = src.type; 754 755 // Events bubbling up the document may have been marked as prevented 756 // by a handler lower down the tree; reflect the correct value. 757 this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || 758 src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; 759 760 // event type 761 // event字面量,如:'click' 762 } else { 763 this.type = src; 764 } 765 766 // Put explicitly provided properties onto the event object 767 // 提供的props將被extend進創建的event中作為屬性 768 if ( props ) { 769 jQuery.extend( this, props ); 770 } 771 772 // Create a timestamp if incoming event doesn't have one 773 this.timeStamp = src && src.timeStamp || jQuery.now(); 774 775 // Mark it as fixed 776 // 標記已經fiexed了 777 this[ jQuery.expando ] = true; 778 }; 779 780 // 函數的形式,避免直接修改屬性值 781 function returnFalse() { 782 return false; 783 } 784 function returnTrue() { 785 return true; 786 } 787 788 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 789 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 790 // jQuery.Event對象的公用方法 791 jQuery.Event.prototype = { 792 // 阻止元素默認操作,做兼容性處理 793 preventDefault: function() { 794 this.isDefaultPrevented = returnTrue; 795 796 var e = this.originalEvent; 797 if ( !e ) { 798 return; 799 } 800 801 // if preventDefault exists run it on the original event 802 if ( e.preventDefault ) { 803 e.preventDefault(); 804 805 // otherwise set the returnValue property of the original event to false (IE) 806 } else { 807 e.returnValue = false; 808 } 809 }, 810 // 阻止元素冒泡傳播,做兼容性處理 811 stopPropagation: function() { 812 this.isPropagationStopped = returnTrue; 813 814 var e = this.originalEvent; 815 if ( !e ) { 816 return; 817 } 818 // if stopPropagation exists run it on the original event 819 if ( e.stopPropagation ) { 820 e.stopPropagation(); 821 } 822 // otherwise set the cancelBubble property of the original event to true (IE) 823 e.cancelBubble = true; 824 }, 825 // 立刻阻止傳播,指的是立即停止與本元素相關的之后的所有事件處理器以及其他元素的事件傳播 826 stopImmediatePropagation: function() { 827 this.isImmediatePropagationStopped = returnTrue; 828 this.stopPropagation(); 829 }, 830 isDefaultPrevented: returnFalse, 831 isPropagationStopped: returnFalse, 832 isImmediatePropagationStopped: returnFalse 833 }; 834 835 // Create mouseenter/leave events using mouseover/out and event-time checks 836 jQuery.each({ 837 mouseenter: "mouseover", 838 mouseleave: "mouseout" 839 }, function( orig, fix ) { 840 jQuery.event.special[ orig ] = { 841 delegateType: fix, 842 bindType: fix, 843 844 handle: function( event ) { 845 var ret, 846 target = this, 847 related = event.relatedTarget, 848 handleObj = event.handleObj, 849 selector = handleObj.selector; 850 851 // For mousenter/leave call the handler if related is outside the target. 852 // NB: No relatedTarget if the mouse left/entered the browser window 853 if ( !related || (related !== target && !jQuery.contains( target, related )) ) { 854 event.type = handleObj.origType; 855 ret = handleObj.handler.apply( this, arguments ); 856 event.type = fix; 857 } 858 return ret; 859 } 860 }; 861 }); 862 863 // IE submit delegation 864 if ( !jQuery.support.submitBubbles ) { 865 866 jQuery.event.special.submit = { 867 setup: function() { 868 // Only need this for delegated form submit events 869 if ( jQuery.nodeName( this, "form" ) ) { 870 return false; 871 } 872 873 // Lazy-add a submit handler when a descendant form may potentially be submitted 874 jQuery.event.add( this, "click._submit keypress._submit", function( e ) { 875 // Node name check avoids a VML-related crash in IE (#9807) 876 var elem = e.target, 877 form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; 878 if ( form && !jQuery._data( form, "_submit_attached" ) ) { 879 jQuery.event.add( form, "submit._submit", function( event ) { 880 event._submit_bubble = true; 881 }); 882 jQuery._data( form, "_submit_attached", true ); 883 } 884 }); 885 // return undefined since we don't need an event listener 886 }, 887 888 postDispatch: function( event ) { 889 // If form was submitted by the user, bubble the event up the tree 890 if ( event._submit_bubble ) { 891 delete event._submit_bubble; 892 if ( this.parentNode && !event.isTrigger ) { 893 jQuery.event.simulate( "submit", this.parentNode, event, true ); 894 } 895 } 896 }, 897 898 teardown: function() { 899 // Only need this for delegated form submit events 900 if ( jQuery.nodeName( this, "form" ) ) { 901 return false; 902 } 903 904 // Remove delegated handlers; cleanData eventually reaps submit handlers attached above 905 jQuery.event.remove( this, "._submit" ); 906 } 907 }; 908 } 909 910 // IE change delegation and checkbox/radio fix 911 if ( !jQuery.support.changeBubbles ) { 912 913 jQuery.event.special.change = { 914 915 setup: function() { 916 917 if ( rformElems.test( this.nodeName ) ) { 918 // IE doesn't fire change on a check/radio until blur; trigger it on click 919 // after a propertychange. Eat the blur-change in special.change.handle. 920 // This still fires onchange a second time for check/radio after blur. 921 if ( this.type === "checkbox" || this.type === "radio" ) { 922 jQuery.event.add( this, "propertychange._change", function( event ) { 923 if ( event.originalEvent.propertyName === "checked" ) { 924 this._just_changed = true; 925 } 926 }); 927 jQuery.event.add( this, "click._change", function( event ) { 928 if ( this._just_changed && !event.isTrigger ) { 929 this._just_changed = false; 930 } 931 // Allow triggered, simulated change events (#11500) 932 jQuery.event.simulate( "change", this, event, true ); 933 }); 934 } 935 return false; 936 } 937 // Delegated event; lazy-add a change handler on descendant inputs 938 jQuery.event.add( this, "beforeactivate._change", function( e ) { 939 var elem = e.target; 940 941 if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { 942 jQuery.event.add( elem, "change._change", function( event ) { 943 if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { 944 jQuery.event.simulate( "change", this.parentNode, event, true ); 945 } 946 }); 947 jQuery._data( elem, "_change_attached", true ); 948 } 949 }); 950 }, 951 952 handle: function( event ) { 953 var elem = event.target; 954 955 // Swallow native change events from checkbox/radio, we already triggered them above 956 if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { 957 return event.handleObj.handler.apply( this, arguments ); 958 } 959 }, 960 961 teardown: function() { 962 jQuery.event.remove( this, "._change" ); 963 964 return !rformElems.test( this.nodeName ); 965 } 966 }; 967 } 968 969 // Create "bubbling" focus and blur events 970 if ( !jQuery.support.focusinBubbles ) { 971 jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { 972 973 // Attach a single capturing handler while someone wants focusin/focusout 974 var attaches = 0, 975 handler = function( event ) { 976 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); 977 }; 978 979 jQuery.event.special[ fix ] = { 980 setup: function() { 981 if ( attaches++ === 0 ) { 982 document.addEventListener( orig, handler, true ); 983 } 984 }, 985 teardown: function() { 986 if ( --attaches === 0 ) { 987 document.removeEventListener( orig, handler, true ); 988 } 989 } 990 }; 991 }); 992 } 993 994 jQuery.fn.extend({ 995 // 注冊事件處理器 996 on: function( types, selector, data, fn, /*INTERNAL*/ one ) { 997 var origFn, type; 998 999 // Types can be a map of types/handlers 1000 // types可以為對象,是類型/函數對集合,如: 1001 // { 1002 // 'click' : fn1 1003 // ,'mouseover' : fn2 1004 // , ... 1005 // } 1006 if ( typeof types === "object" ) { 1007 // ( types-Object, selector, data ) 1008 if ( typeof selector !== "string" ) { // && selector != null 1009 // ( types-Object, data ) 1010 data = data || selector; 1011 selector = undefined; 1012 } 1013 for ( type in types ) { 1014 this.on( type, selector, data, types[ type ], one ); 1015 } 1016 return this; 1017 } 1018 1019 // 以下是根據某些參數有無,對data和selector采取一定的判定匹配措施 1020 if ( data == null && fn == null ) { 1021 // ( types, fn ) 1022 fn = selector; 1023 data = selector = undefined; 1024 } else if ( fn == null ) { 1025 if ( typeof selector === "string" ) { 1026 // ( types, selector, fn ) 1027 fn = data; 1028 data = undefined; 1029 } else { 1030 // ( types, data, fn ) 1031 fn = data; 1032 data = selector; 1033 selector = undefined; 1034 } 1035 } 1036 // 當fn賦值為false時,用返回值為false的函數替換,相當于是一個快捷鍵 1037 if ( fn === false ) { 1038 fn = returnFalse; 1039 // 如果fn為空,則退出,什么都不做 1040 } else if ( !fn ) { 1041 return this; 1042 } 1043 // one參數是內部調用的,one為1表示事件只在內部被調用一次 1044 if ( one === 1 ) { 1045 origFn = fn; 1046 fn = function( event ) { 1047 // Can use an empty set, since event contains the info 1048 // 創建jQuery空對象,調用off方法,傳入帶有信息的event參數(其中包括注冊時的所有信息),在off中會對 1049 // event對象做特殊處理,從而刪除指定type的handler,保證只調用一次 1050 jQuery().off( event ); 1051 return origFn.apply( this, arguments ); 1052 }; 1053 // Use same guid so caller can remove using origFn 1054 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 1055 } 1056 return this.each( function() { 1057 jQuery.event.add( this, types, fn, data, selector ); 1058 }); 1059 }, 1060 // 注冊只能被觸發一次的事件處理器 1061 one: function( types, selector, data, fn ) { 1062 return this.on( types, selector, data, fn, 1 ); 1063 }, 1064 off: function( types, selector, fn ) { 1065 var handleObj, type; 1066 // 如果傳進來的是event對象,那么進行如下處理(因為event對象包含off事件處理器需要的全部信息) 1067 if ( types && types.preventDefault && types.handleObj ) { 1068 // ( event ) dispatched jQuery.Event 1069 handleObj = types.handleObj; 1070 jQuery( types.delegateTarget ).off( 1071 handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, 1072 handleObj.selector, 1073 handleObj.handler 1074 ); 1075 return this; 1076 } 1077 //types可以為對象,是類型/函數對集合,同上面的on 1078 if ( typeof types === "object" ) { 1079 // ( types-object [, selector] ) 1080 for ( type in types ) { 1081 this.off( type, selector, types[ type ] ); 1082 } 1083 return this; 1084 } 1085 // 只有兩個參數的情況 1086 if ( selector === false || typeof selector === "function" ) { 1087 // ( types [, fn] ) 1088 fn = selector; 1089 selector = undefined; 1090 } 1091 // 當fn賦值為false時,用返回值為false的函數替換,相當于是一個快捷鍵 1092 if ( fn === false ) { 1093 fn = returnFalse; 1094 } 1095 return this.each(function() { 1096 jQuery.event.remove( this, types, fn, selector ); 1097 }); 1098 }, 1099 // 綁定事件,與on的區別在于不提供selector,這意味著它不支持事件代理 1100 bind: function( types, data, fn ) { 1101 return this.on( types, null, data, fn ); 1102 }, 1103 unbind: function( types, fn ) { 1104 return this.off( types, null, fn ); 1105 }, 1106 // 與bind類似,但是它支持后綁定 1107 live: function( types, data, fn ) { 1108 // 默認不指定上下問的情況下,代理元素是document,所以說live其實是用的事件代理實現的 1109 jQuery( this.context ).on( types, this.selector, data, fn ); 1110 return this; 1111 }, 1112 die: function( types, fn ) { 1113 jQuery( this.context ).off( types, this.selector || "**", fn ); 1114 return this; 1115 }, 1116 // 事件代理接口,根本上就是調用on 1117 delegate: function( selector, types, data, fn ) { 1118 return this.on( types, selector, data, fn ); 1119 }, 1120 undelegate: function( selector, types, fn ) { 1121 // ( namespace ) or ( selector, types [, fn] ) 1122 return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); 1123 }, 1124 // 觸發指定類型的事件回調函數列表 1125 trigger: function( type, data ) { 1126 return this.each(function() { 1127 jQuery.event.trigger( type, data, this ); 1128 }); 1129 }, 1130 // 與trigger幾乎相同,不同的是,它只對jQuery集合中的第一個元素trigger,而且不冒泡,不執行默認操作 1131 // 其內部調用trigger,用最后一個參數來區別 1132 triggerHandler: function( type, data ) { 1133 if ( this[0] ) { 1134 return jQuery.event.trigger( type, data, this[0], true ); 1135 } 1136 }, 1137 1138 toggle: function( fn ) { 1139 // Save reference to arguments for access in closure 1140 var args = arguments, 1141 guid = fn.guid || jQuery.guid++, 1142 i = 0, 1143 toggler = function( event ) { 1144 // Figure out which function to execute 1145 var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; 1146 jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); 1147 1148 // Make sure that clicks stop 1149 event.preventDefault(); 1150 1151 // and execute the function 1152 return args[ lastToggle ].apply( this, arguments ) || false; 1153 }; 1154 1155 // link all the functions, so any of them can unbind this click handler 1156 toggler.guid = guid; 1157 while ( i < args.length ) { 1158 args[ i++ ].guid = guid; 1159 } 1160 1161 return this.click( toggler ); 1162 }, 1163 // 模擬hover事件 1164 hover: function( fnOver, fnOut ) { 1165 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 1166 } 1167 }); 1168 // 綁定和注冊事件的快捷鍵,內部還是調用on()或者trigger() 1169 // 初始化jQuery.event.fixHooks 1170 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + 1171 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 1172 "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { 1173 1174 // Handle event binding 1175 jQuery.fn[ name ] = function( data, fn ) { 1176 if ( fn == null ) { 1177 fn = data; 1178 data = null; 1179 } 1180 1181 return arguments.length > 0 ? 1182 // 綁定事件 1183 this.on( name, null, data, fn ) : 1184 // 觸發事件,不提供數據data 1185 this.trigger( name ); 1186 }; 1187 1188 1189 // keyHooks 1190 if ( rkeyEvent.test( name ) ) { 1191 jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; 1192 } 1193 // mouseHooks 1194 if ( rmouseEvent.test( name ) ) { 1195 jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; 1196 } 1197 });


?

轉載于:https://www.cnblogs.com/lovesueee/archive/2012/11/20/2778745.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【原创】jQuery1.8.2源码解析之jQuery.event的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美变态另类xxxx | 激情五月综合色婷婷一区二区 | 中国大陆精品视频xxxx | 日本大乳高潮视频在线观看 | 天海翼激烈高潮到腰振不止 | 一本久久伊人热热精品中文字幕 | 兔费看少妇性l交大片免费 | 国产精品人妻一区二区三区四 | 日日碰狠狠躁久久躁蜜桃 | 18无码粉嫩小泬无套在线观看 | 免费看少妇作爱视频 | 亚洲第一网站男人都懂 | 欧美精品一区二区精品久久 | 天堂亚洲2017在线观看 | 最新版天堂资源中文官网 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 精品厕所偷拍各类美女tp嘘嘘 | 国产精品国产三级国产专播 | 欧美熟妇另类久久久久久多毛 | 久久久久99精品国产片 | 久久国产精品萌白酱免费 | 亚洲小说图区综合在线 | 久久久久国色av免费观看性色 | 俺去俺来也在线www色官网 | 精品人妻av区 | 婷婷丁香五月天综合东京热 | 中文无码成人免费视频在线观看 | 99国产欧美久久久精品 | 国产成人精品必看 | 国产无遮挡又黄又爽又色 | 在线观看国产午夜福利片 | 国产免费久久精品国产传媒 | 亚洲国产精品久久久久久 | 日日摸天天摸爽爽狠狠97 | 国内少妇偷人精品视频 | 欧美日本精品一区二区三区 | 在线欧美精品一区二区三区 | 精品欧美一区二区三区久久久 | 狠狠色欧美亚洲狠狠色www | 国产超级va在线观看视频 | 俺去俺来也在线www色官网 | 亚洲国产精品无码一区二区三区 | 中文字幕无码av激情不卡 | 国内丰满熟女出轨videos | 狠狠色噜噜狠狠狠狠7777米奇 | 久久久婷婷五月亚洲97号色 | 久久精品丝袜高跟鞋 | 国产精品嫩草久久久久 | 亚洲日韩中文字幕在线播放 | 水蜜桃亚洲一二三四在线 | 人妻中文无码久热丝袜 | 全黄性性激高免费视频 | 久久综合色之久久综合 | 久久99精品久久久久久 | 九九综合va免费看 | 欧美 丝袜 自拍 制服 另类 | 国产成人无码av片在线观看不卡 | 国产两女互慰高潮视频在线观看 | 国产精品毛片一区二区 | 成年女人永久免费看片 | 国产精品成人av在线观看 | 少妇人妻av毛片在线看 | 欧美熟妇另类久久久久久不卡 | 蜜臀av无码人妻精品 | 又黄又爽又色的视频 | 精品久久久久香蕉网 | 日韩av无码一区二区三区 | 成人免费视频一区二区 | 国产高清av在线播放 | 成人亚洲精品久久久久软件 | 色五月五月丁香亚洲综合网 | 国产精品久久久av久久久 | 亚洲天堂2017无码中文 | 美女扒开屁股让男人桶 | 狠狠色噜噜狠狠狠7777奇米 | 综合人妻久久一区二区精品 | 国产又爽又猛又粗的视频a片 | 亚洲中文字幕无码中文字在线 | 国产精品va在线播放 | 在教室伦流澡到高潮hnp视频 | 久久久久亚洲精品男人的天堂 | 又湿又紧又大又爽a视频国产 | 无码纯肉视频在线观看 | 最近的中文字幕在线看视频 | 亚洲一区二区三区在线观看网站 | 亚洲人亚洲人成电影网站色 | 国产国产精品人在线视 | 亚洲精品一区二区三区婷婷月 | 欧美人与禽zoz0性伦交 | 天天摸天天碰天天添 | 中文字幕无码免费久久9一区9 | √8天堂资源地址中文在线 | 亚洲阿v天堂在线 | 97夜夜澡人人爽人人喊中国片 | 波多野结衣乳巨码无在线观看 | 国产无套粉嫩白浆在线 | 动漫av网站免费观看 | 国产sm调教视频在线观看 | 天天燥日日燥 | 青青久在线视频免费观看 | 一本久道高清无码视频 | 中文字幕日韩精品一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 理论片87福利理论电影 | 国产成人无码专区 | 无码播放一区二区三区 | 粉嫩少妇内射浓精videos | 妺妺窝人体色www婷婷 | 日韩无码专区 | 97资源共享在线视频 | 激情国产av做激情国产爱 | 免费网站看v片在线18禁无码 | 高潮毛片无遮挡高清免费视频 | 亚洲精品无码人妻无码 | 欧美成人午夜精品久久久 | 人妻插b视频一区二区三区 | 国产av无码专区亚洲awww | 久久综合网欧美色妞网 | 久久无码人妻影院 | 性生交片免费无码看人 | 久久精品国产一区二区三区肥胖 | 久久久久成人片免费观看蜜芽 | 中文字幕 人妻熟女 | 成人无码视频免费播放 | av无码不卡在线观看免费 | 国内丰满熟女出轨videos | 999久久久国产精品消防器材 | 又色又爽又黄的美女裸体网站 | 日本va欧美va欧美va精品 | 青青草原综合久久大伊人精品 | 亚洲精品午夜无码电影网 | 人妻人人添人妻人人爱 | 精品人妻人人做人人爽夜夜爽 | 亚洲精品国产a久久久久久 | 蜜桃臀无码内射一区二区三区 | 好男人www社区 | 日欧一片内射va在线影院 | 最新版天堂资源中文官网 | v一区无码内射国产 | 成人aaa片一区国产精品 | 欧洲精品码一区二区三区免费看 | 色综合久久久久综合一本到桃花网 | 狠狠噜狠狠狠狠丁香五月 | 国产精品国产三级国产专播 | 国产成人精品视频ⅴa片软件竹菊 | 野外少妇愉情中文字幕 | 日韩无套无码精品 | 欧美丰满熟妇xxxx性ppx人交 | 天堂在线观看www | 中文字幕av伊人av无码av | 亚洲精品久久久久久久久久久 | 亚洲小说图区综合在线 | 麻豆国产人妻欲求不满谁演的 | 亚洲综合在线一区二区三区 | 又黄又爽又色的视频 | 色婷婷av一区二区三区之红樱桃 | 欧洲欧美人成视频在线 | 国产97在线 | 亚洲 | 亚洲一区二区三区四区 | 免费播放一区二区三区 | 性色欲情网站iwww九文堂 | 波多野42部无码喷潮在线 | 熟妇人妻激情偷爽文 | 无码精品人妻一区二区三区av | 久久午夜无码鲁丝片秋霞 | 午夜熟女插插xx免费视频 | 久久亚洲国产成人精品性色 | 2020久久香蕉国产线看观看 | 少妇被粗大的猛进出69影院 | 日韩av无码中文无码电影 | 88国产精品欧美一区二区三区 | 人人妻人人澡人人爽欧美精品 | 无码av中文字幕免费放 | 欧美变态另类xxxx | 欧美性黑人极品hd | 亚洲中文字幕在线无码一区二区 | 在线观看免费人成视频 | 国内精品九九久久久精品 | 亚洲春色在线视频 | 中文精品久久久久人妻不卡 | 国产办公室秘书无码精品99 | 999久久久国产精品消防器材 | 在线天堂新版最新版在线8 | 国产人妖乱国产精品人妖 | 久久精品国产一区二区三区肥胖 | 好爽又高潮了毛片免费下载 | 免费播放一区二区三区 | 中文字幕无码乱人伦 | 国产精品欧美成人 | 色综合天天综合狠狠爱 | 女人和拘做爰正片视频 | 国产美女精品一区二区三区 | 内射爽无广熟女亚洲 | v一区无码内射国产 | 玩弄人妻少妇500系列视频 | 国产手机在线αⅴ片无码观看 | 欧洲极品少妇 | 成人动漫在线观看 | 好男人社区资源 | 在线成人www免费观看视频 | 亚洲伊人久久精品影院 | 国产激情艳情在线看视频 | 强奷人妻日本中文字幕 | 久久久久久av无码免费看大片 | 国产深夜福利视频在线 | 久久综合香蕉国产蜜臀av | 国产熟妇另类久久久久 | 欧洲熟妇精品视频 | 麻豆蜜桃av蜜臀av色欲av | 国产av无码专区亚洲a∨毛片 | 高清国产亚洲精品自在久久 | 久久99精品久久久久久动态图 | 九九在线中文字幕无码 | 亚洲成av人综合在线观看 | 亚洲精品美女久久久久久久 | 色妞www精品免费视频 | 又粗又大又硬又长又爽 | 欧美日韩亚洲国产精品 | 久久婷婷五月综合色国产香蕉 | 国产成人无码午夜视频在线观看 | 国产又粗又硬又大爽黄老大爷视 | 99精品国产综合久久久久五月天 | 永久免费观看美女裸体的网站 | 国内精品久久毛片一区二区 | 欧美日韩在线亚洲综合国产人 | 极品嫩模高潮叫床 | 国产亚洲精品久久久久久久 | 国产精品久久久av久久久 | 国产av一区二区精品久久凹凸 | 国产又粗又硬又大爽黄老大爷视 | 一区二区三区高清视频一 | 俄罗斯老熟妇色xxxx | 蜜桃无码一区二区三区 | 亚洲精品国产精品乱码视色 | 天下第一社区视频www日本 | 欧美精品在线观看 | 久久久久人妻一区精品色欧美 | 无码人中文字幕 | 国产猛烈高潮尖叫视频免费 | 久久97精品久久久久久久不卡 | 黑人巨大精品欧美黑寡妇 | 亚洲午夜久久久影院 | 中文字幕日韩精品一区二区三区 | av香港经典三级级 在线 | 亚洲 日韩 欧美 成人 在线观看 | 日本欧美一区二区三区乱码 | 亚洲国产午夜精品理论片 | 成人精品一区二区三区中文字幕 | 成人综合网亚洲伊人 | 久久久精品欧美一区二区免费 | 久久无码人妻影院 | 少妇人妻大乳在线视频 | 久久人人爽人人爽人人片ⅴ | 婷婷色婷婷开心五月四房播播 | 成人性做爰aaa片免费看 | 久久国语露脸国产精品电影 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 99久久亚洲精品无码毛片 | 欧美人与物videos另类 | 日本一卡2卡3卡四卡精品网站 | 在线观看国产一区二区三区 | 啦啦啦www在线观看免费视频 | 国产亚洲精品精品国产亚洲综合 | 丰满少妇高潮惨叫视频 | 日韩人妻少妇一区二区三区 | 色婷婷综合中文久久一本 | 丰满少妇弄高潮了www | 无码人妻久久一区二区三区不卡 | 秋霞成人午夜鲁丝一区二区三区 | 伊人久久大香线焦av综合影院 | 无码人妻久久一区二区三区不卡 | 一本久久伊人热热精品中文字幕 | 亚洲码国产精品高潮在线 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲区小说区激情区图片区 | 亚洲欧美中文字幕5发布 | 精品人妻中文字幕有码在线 | 日本肉体xxxx裸交 | 人妻少妇精品无码专区二区 | 欧美丰满老熟妇xxxxx性 | 色老头在线一区二区三区 | 日本精品久久久久中文字幕 | 国产成人久久精品流白浆 | 成人性做爰aaa片免费看不忠 | 5858s亚洲色大成网站www | 亚洲人成影院在线无码按摩店 | 丰满肥臀大屁股熟妇激情视频 | 亚洲国产欧美日韩精品一区二区三区 | 理论片87福利理论电影 | 国产av人人夜夜澡人人爽麻豆 | 性欧美熟妇videofreesex | 荫蒂添的好舒服视频囗交 | 牛和人交xxxx欧美 | 天天做天天爱天天爽综合网 | 欧美变态另类xxxx | 性色av无码免费一区二区三区 | 国内综合精品午夜久久资源 | 精品国偷自产在线 | 中文字幕日产无线码一区 | 久久99精品久久久久久 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 强奷人妻日本中文字幕 | 国内精品九九久久久精品 | 欧美成人午夜精品久久久 | 亚洲码国产精品高潮在线 | 色综合视频一区二区三区 | 国产av无码专区亚洲a∨毛片 | 国产97人人超碰caoprom | 好男人社区资源 | 99久久婷婷国产综合精品青草免费 | 国産精品久久久久久久 | 国产三级久久久精品麻豆三级 | 色情久久久av熟女人妻网站 | 日产国产精品亚洲系列 | 人人妻在人人 | 精品无码国产一区二区三区av | 国产精品久久久久7777 | 丰满人妻精品国产99aⅴ | 曰本女人与公拘交酡免费视频 | 中文精品久久久久人妻不卡 | 国产综合色产在线精品 | 日韩成人一区二区三区在线观看 | 一区二区传媒有限公司 | 精品无码一区二区三区的天堂 | 国产精品人妻一区二区三区四 | 成人影院yy111111在线观看 | 99麻豆久久久国产精品免费 | 精品人妻av区 | 国产亚洲视频中文字幕97精品 | 日日摸天天摸爽爽狠狠97 | 色 综合 欧美 亚洲 国产 | 精品无码国产一区二区三区av | 一本久道久久综合狠狠爱 | 亚洲人亚洲人成电影网站色 | 亚洲乱码中文字幕在线 | 又湿又紧又大又爽a视频国产 | 国产色在线 | 国产 | 国产在线精品一区二区三区直播 | 牲欲强的熟妇农村老妇女 | 亚洲中文字幕va福利 | 内射后入在线观看一区 | 午夜熟女插插xx免费视频 | 国产无遮挡又黄又爽免费视频 | 国产女主播喷水视频在线观看 | 露脸叫床粗话东北少妇 | 日本大乳高潮视频在线观看 | 又大又硬又黄的免费视频 | 亚洲精品综合一区二区三区在线 | 中文字幕无码日韩专区 | 日产精品99久久久久久 | 男人的天堂av网站 | 久久综合久久自在自线精品自 | 激情综合激情五月俺也去 | 婷婷综合久久中文字幕蜜桃三电影 | 国产成人无码av片在线观看不卡 | 中文无码精品a∨在线观看不卡 | 色综合久久久无码中文字幕 | 亚洲精品国产精品乱码视色 | 精品欧美一区二区三区久久久 | 东京一本一道一二三区 | 波多野结衣av在线观看 | 国产后入清纯学生妹 | 中文字幕乱妇无码av在线 | 俄罗斯老熟妇色xxxx | 久久综合香蕉国产蜜臀av | 黑人粗大猛烈进出高潮视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 中文毛片无遮挡高清免费 | 性欧美牲交在线视频 | 天堂无码人妻精品一区二区三区 | 亚洲乱码日产精品bd | 亚洲人成人无码网www国产 | 国产人妻精品一区二区三区不卡 | 成人无码影片精品久久久 | 精品国产福利一区二区 | 丝袜美腿亚洲一区二区 | 色欲综合久久中文字幕网 | 欧美日韩久久久精品a片 | 亚洲综合无码一区二区三区 | 精品无码av一区二区三区 | 亚洲精品中文字幕久久久久 | 无码福利日韩神码福利片 | 一本色道婷婷久久欧美 | 国内精品人妻无码久久久影院 | 亚洲一区二区三区含羞草 | 久久国产精品_国产精品 | 欧美老妇交乱视频在线观看 | 真人与拘做受免费视频 | 亚洲成av人片天堂网无码】 | 国产成人无码av一区二区 | 欧美性猛交xxxx富婆 | 久久99精品久久久久久动态图 | 亚洲熟妇色xxxxx欧美老妇y | 精品aⅴ一区二区三区 | 精品欧洲av无码一区二区三区 | 国产综合在线观看 | 亚洲一区二区三区在线观看网站 | 亚洲一区二区三区播放 | 成人一在线视频日韩国产 | 无码人中文字幕 | 日韩精品无码一区二区中文字幕 | 国产高清av在线播放 | 无码福利日韩神码福利片 | 东京一本一道一二三区 | 欧美国产日韩亚洲中文 | 妺妺窝人体色www在线小说 | 西西人体www44rt大胆高清 | 国产三级精品三级男人的天堂 | 少妇无套内谢久久久久 | 人妻天天爽夜夜爽一区二区 | 日韩无套无码精品 | 人妻与老人中文字幕 | 亚洲成a人片在线观看无码 | 亚洲欧美国产精品专区久久 | 男女猛烈xx00免费视频试看 | 在线精品国产一区二区三区 | 亚洲日韩av片在线观看 | 亚洲精品久久久久久久久久久 | 亚洲精品www久久久 | 蜜臀av在线播放 久久综合激激的五月天 | 免费无码午夜福利片69 | 亚洲一区二区三区偷拍女厕 | 久久国产劲爆∧v内射 | 中文久久乱码一区二区 | 成人综合网亚洲伊人 | 性啪啪chinese东北女人 | 日本爽爽爽爽爽爽在线观看免 | 中文字幕乱妇无码av在线 | 纯爱无遮挡h肉动漫在线播放 | 日本高清一区免费中文视频 | 无套内射视频囯产 | 亚洲区欧美区综合区自拍区 | 日韩在线不卡免费视频一区 | 国产精品多人p群无码 | 精品久久久久久人妻无码中文字幕 | 免费国产成人高清在线观看网站 | 亚洲综合伊人久久大杳蕉 | 亚洲国产精华液网站w | 亚洲午夜久久久影院 | 熟妇激情内射com | 欧美三级不卡在线观看 | 色噜噜亚洲男人的天堂 | 久久综合九色综合欧美狠狠 | 丰腴饱满的极品熟妇 | 又湿又紧又大又爽a视频国产 | 一本久道久久综合婷婷五月 | 色婷婷av一区二区三区之红樱桃 | 日本精品人妻无码77777 天堂一区人妻无码 | 性生交大片免费看l | 东北女人啪啪对白 | 亚洲国产精品久久久天堂 | 少妇厨房愉情理9仑片视频 | 亚洲国产高清在线观看视频 | 夜夜夜高潮夜夜爽夜夜爰爰 | 99久久亚洲精品无码毛片 | 亚洲色无码一区二区三区 | 无码人妻少妇伦在线电影 | 亚洲国产精品无码一区二区三区 | 国产在热线精品视频 | 国产乱人伦偷精品视频 | 无码人妻丰满熟妇区五十路百度 | 久久精品成人欧美大片 | 精品无码国产自产拍在线观看蜜 | 97精品人妻一区二区三区香蕉 | 亚洲色欲色欲天天天www | 一区二区三区乱码在线 | 欧洲 | 无码中文字幕色专区 | 成人试看120秒体验区 | 啦啦啦www在线观看免费视频 | 搡女人真爽免费视频大全 | 国产熟妇另类久久久久 | 成人无码精品1区2区3区免费看 | 少妇性l交大片欧洲热妇乱xxx | 日韩欧美成人免费观看 | 久久精品国产99精品亚洲 | 丰腴饱满的极品熟妇 | 日日碰狠狠躁久久躁蜜桃 | 欧美阿v高清资源不卡在线播放 | 亚洲人亚洲人成电影网站色 | 成人亚洲精品久久久久软件 | 西西人体www44rt大胆高清 | 在线亚洲高清揄拍自拍一品区 | 中文字幕无码av激情不卡 | 国产精品99久久精品爆乳 | 欧美 丝袜 自拍 制服 另类 | 人妻无码久久精品人妻 | 曰韩无码二三区中文字幕 | 免费无码肉片在线观看 | 窝窝午夜理论片影院 | 天天拍夜夜添久久精品 | 强辱丰满人妻hd中文字幕 | 欧美xxxxx精品 | 老司机亚洲精品影院 | 成在人线av无码免观看麻豆 | 亚洲男女内射在线播放 | v一区无码内射国产 | 亚洲日韩中文字幕在线播放 | 国产精品国产自线拍免费软件 | 久久久久免费看成人影片 | 国产亚洲精品精品国产亚洲综合 | 男女性色大片免费网站 | www国产亚洲精品久久网站 | 综合激情五月综合激情五月激情1 | 欧美放荡的少妇 | 日日摸天天摸爽爽狠狠97 | 装睡被陌生人摸出水好爽 | 亚洲呦女专区 | a在线亚洲男人的天堂 | 久久精品国产大片免费观看 | 国产精品丝袜黑色高跟鞋 | 人妻中文无码久热丝袜 | 国产亚洲精品精品国产亚洲综合 | 亚洲精品综合五月久久小说 | 野狼第一精品社区 | 成 人 免费观看网站 | 少妇性l交大片 | 中文字幕精品av一区二区五区 | 美女黄网站人色视频免费国产 | 亚洲区小说区激情区图片区 | 国产在线aaa片一区二区99 | 午夜福利不卡在线视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | a在线观看免费网站大全 | 日韩亚洲欧美精品综合 | 乱人伦人妻中文字幕无码 | 丰满少妇人妻久久久久久 | 久久久久99精品国产片 | 色 综合 欧美 亚洲 国产 | 婷婷色婷婷开心五月四房播播 | 亚洲成a人一区二区三区 | 国产特级毛片aaaaaaa高清 | 国产精品久久久 | 奇米影视7777久久精品人人爽 | 美女张开腿让人桶 | 午夜精品一区二区三区在线观看 | 国产亚洲tv在线观看 | 国产 浪潮av性色四虎 | 99久久久国产精品无码免费 | 无码人妻少妇伦在线电影 | 亚洲日韩一区二区 | 国产精品免费大片 | 国产精品永久免费视频 | 中文字幕无码免费久久9一区9 | 狂野欧美性猛交免费视频 | 国产精品久久久久久久影院 | 人妻aⅴ无码一区二区三区 | 免费观看激色视频网站 | 久久久久免费看成人影片 | 性做久久久久久久免费看 | 天天爽夜夜爽夜夜爽 | 国产乱人偷精品人妻a片 | 人妻熟女一区 | 亚洲热妇无码av在线播放 | 给我免费的视频在线观看 | 色 综合 欧美 亚洲 国产 | 狠狠亚洲超碰狼人久久 | 三上悠亚人妻中文字幕在线 | 亚洲无人区午夜福利码高清完整版 | 亚洲狠狠色丁香婷婷综合 | 国产精品亚洲一区二区三区喷水 | 伊人久久婷婷五月综合97色 | 九月婷婷人人澡人人添人人爽 | 无码av免费一区二区三区试看 | 精品一区二区三区波多野结衣 | 久久亚洲精品中文字幕无男同 | 人人爽人人爽人人片av亚洲 | 欧美日韩人成综合在线播放 | 亚洲国产一区二区三区在线观看 | 色一情一乱一伦一视频免费看 | 男女爱爱好爽视频免费看 | 偷窥日本少妇撒尿chinese | 亚洲大尺度无码无码专区 | 亚洲高清偷拍一区二区三区 | 宝宝好涨水快流出来免费视频 | 宝宝好涨水快流出来免费视频 | 水蜜桃av无码 | 久热国产vs视频在线观看 | 粉嫩少妇内射浓精videos | 亚洲综合精品香蕉久久网 | 亚洲人成影院在线无码按摩店 | 一区二区三区高清视频一 | 妺妺窝人体色www在线小说 | 久久久国产一区二区三区 | 欧美刺激性大交 | 日韩人妻无码一区二区三区久久99 | 一个人看的视频www在线 | 乌克兰少妇xxxx做受 | 波多野结衣乳巨码无在线观看 | 任你躁在线精品免费 | 色综合久久网 | av香港经典三级级 在线 | 国产一区二区三区精品视频 | 国产婷婷色一区二区三区在线 | 双乳奶水饱满少妇呻吟 | 无码一区二区三区在线观看 | 无码av岛国片在线播放 | 麻豆精品国产精华精华液好用吗 | 国产超碰人人爽人人做人人添 | 日日摸日日碰夜夜爽av | 久久无码人妻影院 | 久久久亚洲欧洲日产国码αv | 国产成人一区二区三区别 | 18精品久久久无码午夜福利 | 水蜜桃av无码 | 午夜精品久久久久久久 | 日本高清一区免费中文视频 | 中文字幕乱妇无码av在线 | 无码人妻黑人中文字幕 | 欧美老妇交乱视频在线观看 | 国产xxx69麻豆国语对白 | 四虎国产精品一区二区 | 国产成人一区二区三区别 | 呦交小u女精品视频 | 欧美精品免费观看二区 | 一本色道久久综合亚洲精品不卡 | 狠狠躁日日躁夜夜躁2020 | 亚洲阿v天堂在线 | 国产亚洲精品久久久久久久久动漫 | 亚洲精品午夜国产va久久成人 | 无码av中文字幕免费放 | 国产一区二区三区四区五区加勒比 | 正在播放老肥熟妇露脸 | 大肉大捧一进一出好爽视频 | 国产成人精品久久亚洲高清不卡 | 欧美日本免费一区二区三区 | 国产精品鲁鲁鲁 | 久久久久久av无码免费看大片 | 国产欧美熟妇另类久久久 | 东京无码熟妇人妻av在线网址 | 久久精品中文字幕大胸 | 97久久超碰中文字幕 | 亚洲国产精品美女久久久久 | 国产色在线 | 国产 | 日韩人妻系列无码专区 | 无码国产色欲xxxxx视频 | 捆绑白丝粉色jk震动捧喷白浆 | 国产免费久久久久久无码 | 久久精品人妻少妇一区二区三区 | 亚洲日韩中文字幕在线播放 | 亚洲成色在线综合网站 | 成在人线av无码免观看麻豆 | 人人妻人人藻人人爽欧美一区 | 免费乱码人妻系列无码专区 | 国内综合精品午夜久久资源 | 久久精品国产亚洲精品 | 久久久久久a亚洲欧洲av冫 | 色 综合 欧美 亚洲 国产 | 2019午夜福利不卡片在线 | 国产亚洲人成在线播放 | 18无码粉嫩小泬无套在线观看 | 日本熟妇乱子伦xxxx | 天堂久久天堂av色综合 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 波多野结衣乳巨码无在线观看 | 欧美性黑人极品hd | 全黄性性激高免费视频 | 日产国产精品亚洲系列 | 99视频精品全部免费免费观看 | 成年美女黄网站色大免费视频 | 国产女主播喷水视频在线观看 | 国产亚洲日韩欧美另类第八页 | 最近免费中文字幕中文高清百度 | 夜先锋av资源网站 | 欧美日本免费一区二区三区 | 亚洲第一无码av无码专区 | 亚洲爆乳无码专区 | 国产熟女一区二区三区四区五区 | 日韩在线不卡免费视频一区 | 精品无码国产一区二区三区av | 国产av人人夜夜澡人人爽麻豆 | 99久久精品国产一区二区蜜芽 | 午夜时刻免费入口 | 日本熟妇大屁股人妻 | 国产亚洲精品久久久久久久 | 国产后入清纯学生妹 | 大地资源网第二页免费观看 | 98国产精品综合一区二区三区 | 色综合久久88色综合天天 | 日本www一道久久久免费榴莲 | 亚洲欧美国产精品专区久久 | 国产卡一卡二卡三 | 亚洲男人av天堂午夜在 | 日韩精品成人一区二区三区 | 香蕉久久久久久av成人 | 精品人人妻人人澡人人爽人人 | 全球成人中文在线 | 亚洲阿v天堂在线 | 国产 精品 自在自线 | 性生交片免费无码看人 | 老子影院午夜伦不卡 | 国产人妻人伦精品1国产丝袜 | 日韩人妻少妇一区二区三区 | 国产精品香蕉在线观看 | 精品无人区无码乱码毛片国产 | 亚洲欧美日韩成人高清在线一区 | 奇米影视888欧美在线观看 | 激情爆乳一区二区三区 | 亚洲熟妇色xxxxx欧美老妇y | 中文字幕日产无线码一区 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲熟妇色xxxxx亚洲 | 少女韩国电视剧在线观看完整 | 97精品国产97久久久久久免费 | 激情内射亚州一区二区三区爱妻 | 爱做久久久久久 | 国内精品一区二区三区不卡 | 亚洲精品久久久久avwww潮水 | 超碰97人人做人人爱少妇 | 任你躁在线精品免费 | 国产一区二区不卡老阿姨 | 国产精品久久久久久亚洲毛片 | 色综合视频一区二区三区 | 国产又粗又硬又大爽黄老大爷视 | 精品国产一区二区三区四区 | 亚洲中文字幕成人无码 | 丰满岳乱妇在线观看中字无码 | 国产精品美女久久久久av爽李琼 | a片在线免费观看 | 性生交大片免费看女人按摩摩 | 久久99热只有频精品8 | 国产真实伦对白全集 | 久青草影院在线观看国产 | 人人妻人人藻人人爽欧美一区 | 国产精品久久久久久久影院 | 免费看男女做好爽好硬视频 | 精品人妻中文字幕有码在线 | 久久久久久av无码免费看大片 | 欧美乱妇无乱码大黄a片 | 99久久99久久免费精品蜜桃 | 国产三级精品三级男人的天堂 | 无码成人精品区在线观看 | 亚洲狠狠婷婷综合久久 | 2020最新国产自产精品 | 国产三级久久久精品麻豆三级 | 天天摸天天透天天添 | 综合激情五月综合激情五月激情1 | 亚洲欧美综合区丁香五月小说 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品-区区久久久狼 | 在线 国产 欧美 亚洲 天堂 | 人妻天天爽夜夜爽一区二区 | 永久黄网站色视频免费直播 | 无码国内精品人妻少妇 | 亚洲日本在线电影 | 久久午夜无码鲁丝片 | 国产精品美女久久久久av爽李琼 | 成人毛片一区二区 | 在线视频网站www色 | 久久综合激激的五月天 | 国产激情无码一区二区 | 少妇无码吹潮 | 高清国产亚洲精品自在久久 | 亚洲精品一区二区三区大桥未久 | 极品嫩模高潮叫床 | 精品一区二区三区无码免费视频 | 久久无码专区国产精品s | 国产精品无码一区二区三区不卡 | 人人妻在人人 | 在线а√天堂中文官网 | 国产精品沙发午睡系列 | 国产精品成人av在线观看 | 日韩人妻系列无码专区 | 久久久国产精品无码免费专区 | 偷窥日本少妇撒尿chinese | 国产明星裸体无码xxxx视频 | 麻豆md0077饥渴少妇 | 精品少妇爆乳无码av无码专区 | 日韩精品一区二区av在线 | 中文字幕无线码免费人妻 | 东京一本一道一二三区 | 亚洲精品无码国产 | 欧美国产亚洲日韩在线二区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 免费看少妇作爱视频 | 国产一区二区三区日韩精品 | 成人性做爰aaa片免费看 | 曰韩少妇内射免费播放 | 大地资源中文第3页 | 国产成人综合美国十次 | 国产成人无码av一区二区 | 在线观看免费人成视频 | 国产精品成人av在线观看 | 国内精品久久久久久中文字幕 | 老熟女乱子伦 | 人人妻人人澡人人爽精品欧美 | 性做久久久久久久免费看 | 台湾无码一区二区 | 男人的天堂av网站 | 樱花草在线社区www | 精品一区二区三区波多野结衣 | 人人妻人人澡人人爽人人精品 | 77777熟女视频在线观看 а天堂中文在线官网 | 99久久精品日本一区二区免费 | 少妇性l交大片欧洲热妇乱xxx | 久久 国产 尿 小便 嘘嘘 | 澳门永久av免费网站 | 国产精品第一国产精品 | 日韩无套无码精品 | 亚洲精品无码人妻无码 | 中文字幕乱码亚洲无线三区 | 国产精品.xx视频.xxtv | 日韩人妻无码中文字幕视频 | 精品国产一区二区三区四区 | 精品无码一区二区三区的天堂 | 国产无遮挡又黄又爽又色 | 嫩b人妻精品一区二区三区 | 久久精品国产精品国产精品污 | 中文字幕乱码中文乱码51精品 | 一本久道久久综合婷婷五月 | 97色伦图片97综合影院 | aⅴ在线视频男人的天堂 | 日本大香伊一区二区三区 | 精品人妻av区 | 东京一本一道一二三区 | 日韩欧美群交p片內射中文 | 日产精品高潮呻吟av久久 | 乱码av麻豆丝袜熟女系列 | 日本欧美一区二区三区乱码 | 国产乱码精品一品二品 | 美女黄网站人色视频免费国产 | 欧美老熟妇乱xxxxx | 黑森林福利视频导航 | 国产亚洲精品久久久久久国模美 | 久久久无码中文字幕久... | 国产av一区二区三区最新精品 | 久久久久人妻一区精品色欧美 | 日本xxxx色视频在线观看免费 | 中文久久乱码一区二区 | 精品国精品国产自在久国产87 | 精品熟女少妇av免费观看 | 大色综合色综合网站 | 久久99精品久久久久婷婷 | 美女扒开屁股让男人桶 | 日本www一道久久久免费榴莲 | 亚洲aⅴ无码成人网站国产app | 国产97色在线 | 免 | 丰满少妇弄高潮了www | 少妇人妻偷人精品无码视频 | 精品国产乱码久久久久乱码 | 色一情一乱一伦一区二区三欧美 | 欧美人与牲动交xxxx | 狂野欧美性猛交免费视频 | 中文亚洲成a人片在线观看 | 精品 日韩 国产 欧美 视频 | 亚洲成av人片在线观看无码不卡 | 欧美日韩人成综合在线播放 | 人人澡人人妻人人爽人人蜜桃 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲aⅴ无码成人网站国产app | 又紧又大又爽精品一区二区 | 久精品国产欧美亚洲色aⅴ大片 | 精品乱码久久久久久久 | 少妇性荡欲午夜性开放视频剧场 | 国产国产精品人在线视 | 国产麻豆精品一区二区三区v视界 | 人人澡人人妻人人爽人人蜜桃 | 国产猛烈高潮尖叫视频免费 | 精品无码av一区二区三区 | 岛国片人妻三上悠亚 | 大肉大捧一进一出好爽视频 | 亚洲欧美精品伊人久久 | 人妻夜夜爽天天爽三区 | 国产尤物精品视频 | 亚洲精品国产品国语在线观看 | 丰满少妇弄高潮了www | 亚洲欧美日韩成人高清在线一区 | 日本熟妇人妻xxxxx人hd | 日韩精品a片一区二区三区妖精 | 日本精品少妇一区二区三区 | 精品无人区无码乱码毛片国产 | 国产亚洲精品久久久久久国模美 | 男人的天堂2018无码 | 天天摸天天碰天天添 | 图片小说视频一区二区 | 丝袜 中出 制服 人妻 美腿 | 老熟女重囗味hdxx69 | 亚洲国产精品久久人人爱 | 自拍偷自拍亚洲精品被多人伦好爽 | 中文字幕无码免费久久9一区9 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品第一国产精品 | 乱人伦中文视频在线观看 | 性色欲网站人妻丰满中文久久不卡 | 超碰97人人射妻 | 精品国产一区二区三区av 性色 | 亚洲色大成网站www | 六月丁香婷婷色狠狠久久 | 亚洲一区二区三区香蕉 | 无码纯肉视频在线观看 | 性欧美牲交在线视频 | 久久精品丝袜高跟鞋 | 国产亚洲视频中文字幕97精品 | 国产精品第一区揄拍无码 | 国产成人午夜福利在线播放 | 久久久无码中文字幕久... | 三级4级全黄60分钟 | 99riav国产精品视频 | 国产午夜无码视频在线观看 | 国产精品久久久久久久9999 | 久久久久免费看成人影片 | 最近中文2019字幕第二页 | 亚洲日韩av一区二区三区中文 | 俺去俺来也www色官网 | 乱中年女人伦av三区 | 亚洲精品国产第一综合99久久 | 成熟人妻av无码专区 | 大乳丰满人妻中文字幕日本 | 精品一区二区三区波多野结衣 | 97精品人妻一区二区三区香蕉 | 国产精品久久久久9999小说 | 免费国产成人高清在线观看网站 | 欧美亚洲日韩国产人成在线播放 | 午夜精品久久久久久久 | 日本欧美一区二区三区乱码 | 国模大胆一区二区三区 | 国产精品久久久午夜夜伦鲁鲁 | 丝袜美腿亚洲一区二区 | 亚洲中文字幕在线观看 | 漂亮人妻洗澡被公强 日日躁 | 人人妻人人澡人人爽欧美一区九九 | 丰满护士巨好爽好大乳 | 国产精品久久国产三级国 | 香港三级日本三级妇三级 | 国产精品久久久久久亚洲影视内衣 | 无码播放一区二区三区 | 给我免费的视频在线观看 | 亚洲综合另类小说色区 | 性欧美牲交xxxxx视频 | 无码人妻黑人中文字幕 | 久久久久久久女国产乱让韩 | 一个人免费观看的www视频 | 国产精品久免费的黄网站 | 色欲av亚洲一区无码少妇 | 精品水蜜桃久久久久久久 | 国产电影无码午夜在线播放 | 久久亚洲精品中文字幕无男同 | 亚洲国产欧美国产综合一区 | 国产色视频一区二区三区 | 色综合久久久无码中文字幕 | 亚洲高清偷拍一区二区三区 | 欧洲vodafone精品性 | 一二三四社区在线中文视频 | 波多野结衣一区二区三区av免费 | 女人色极品影院 | 人人妻人人澡人人爽精品欧美 | 免费无码的av片在线观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲成av人片天堂网无码】 | 中文精品无码中文字幕无码专区 | 人人妻人人澡人人爽欧美一区九九 | 狠狠色欧美亚洲狠狠色www | 丁香花在线影院观看在线播放 | 亚洲人成影院在线无码按摩店 | 国产麻豆精品一区二区三区v视界 | 日本精品人妻无码免费大全 | 熟女俱乐部五十路六十路av | 亚洲毛片av日韩av无码 | 人妻体内射精一区二区三四 | 熟妇女人妻丰满少妇中文字幕 | 无码av最新清无码专区吞精 | 亚洲经典千人经典日产 | 欧美精品一区二区精品久久 | 久久综合激激的五月天 | 国精产品一品二品国精品69xx | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 18精品久久久无码午夜福利 | 国产精品高潮呻吟av久久4虎 | 国产亚洲欧美日韩亚洲中文色 | 狠狠色欧美亚洲狠狠色www | 国产精品二区一区二区aⅴ污介绍 | 亚洲乱码日产精品bd | 国产在线无码精品电影网 | 俺去俺来也在线www色官网 | 中文字幕无码免费久久9一区9 | 亚洲男人av香蕉爽爽爽爽 | 免费人成在线观看网站 | 丰满妇女强制高潮18xxxx | 风流少妇按摩来高潮 | 黑人大群体交免费视频 | 中文字幕无码乱人伦 | 亚洲综合无码一区二区三区 | 欧美猛少妇色xxxxx | 免费观看的无遮挡av | 中文无码精品a∨在线观看不卡 | 无码国内精品人妻少妇 | 荡女精品导航 | 欧美freesex黑人又粗又大 | 亚洲日韩av一区二区三区中文 | 色婷婷综合激情综在线播放 | 色噜噜亚洲男人的天堂 | 日本在线高清不卡免费播放 | 亚洲国产精品久久人人爱 | 学生妹亚洲一区二区 | 亚洲精品www久久久 | 男女超爽视频免费播放 | 欧美午夜特黄aaaaaa片 | 又大又硬又爽免费视频 | 大肉大捧一进一出视频出来呀 | 人妻插b视频一区二区三区 | 综合激情五月综合激情五月激情1 | 人人澡人人妻人人爽人人蜜桃 | 国产精品久久久av久久久 | 377p欧洲日本亚洲大胆 | 精品一区二区不卡无码av | 国产成人无码一二三区视频 | 自拍偷自拍亚洲精品10p | 成人亚洲精品久久久久 | 纯爱无遮挡h肉动漫在线播放 | 中文字幕无码人妻少妇免费 | 国产又爽又黄又刺激的视频 | 欧美日本精品一区二区三区 | 精品欧洲av无码一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 亚洲国产av精品一区二区蜜芽 | 亚洲最大成人网站 | 久久精品人人做人人综合 | 乌克兰少妇xxxx做受 | 免费人成在线观看网站 | 人人妻人人澡人人爽人人精品浪潮 | 日韩av无码一区二区三区 | 亚洲一区二区三区国产精华液 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲欧洲无卡二区视頻 | 麻豆成人精品国产免费 | 中文字幕人妻无码一夲道 | 色欲久久久天天天综合网精品 | 国产亲子乱弄免费视频 | 日韩亚洲欧美精品综合 | 捆绑白丝粉色jk震动捧喷白浆 | 国产精品va在线观看无码 | 人妻少妇精品无码专区动漫 | 亚洲无人区午夜福利码高清完整版 | 无码福利日韩神码福利片 | 性欧美大战久久久久久久 | 国产精品亚洲综合色区韩国 | 在线亚洲高清揄拍自拍一品区 | 亚洲日韩精品欧美一区二区 | 久久精品成人欧美大片 | 久久亚洲国产成人精品性色 | 性欧美牲交xxxxx视频 | 日韩人妻无码中文字幕视频 | 精品无码国产一区二区三区av | 在线天堂新版最新版在线8 | ass日本丰满熟妇pics | 99久久精品无码一区二区毛片 | 网友自拍区视频精品 | 野狼第一精品社区 | 国产人妻大战黑人第1集 | 久久久久人妻一区精品色欧美 | 亚洲精品成人av在线 | 精品成在人线av无码免费看 | 娇妻被黑人粗大高潮白浆 | 男女性色大片免费网站 | 免费看男女做好爽好硬视频 | 性生交大片免费看l | 男女猛烈xx00免费视频试看 | 日本精品人妻无码免费大全 | 中文字幕人妻无码一区二区三区 | 女人被男人爽到呻吟的视频 | 欧美性猛交xxxx富婆 | 国产成人久久精品流白浆 | 999久久久国产精品消防器材 | 国产特级毛片aaaaaa高潮流水 | 国产区女主播在线观看 | 无码帝国www无码专区色综合 | 亚洲中文字幕在线观看 | 男女作爱免费网站 | 又粗又大又硬毛片免费看 | 国产片av国语在线观看 | 国产精品18久久久久久麻辣 | 丰满护士巨好爽好大乳 | 亚洲色成人中文字幕网站 | 国产 浪潮av性色四虎 | 人人妻人人澡人人爽人人精品 | 最近的中文字幕在线看视频 | 澳门永久av免费网站 | 2019午夜福利不卡片在线 | 中文字幕日产无线码一区 | 亚洲乱码日产精品bd | 一本大道久久东京热无码av | 亚洲熟妇色xxxxx欧美老妇 | 中国大陆精品视频xxxx | 人妻无码久久精品人妻 | 亚洲乱码国产乱码精品精 | 5858s亚洲色大成网站www | 日日天日日夜日日摸 | 天天拍夜夜添久久精品大 | 2020久久香蕉国产线看观看 | 亚洲va欧美va天堂v国产综合 | 精品国产精品久久一区免费式 | 欧美大屁股xxxxhd黑色 | 欧美黑人乱大交 | 亚洲自偷自拍另类第1页 | 中文字幕无码日韩欧毛 | 人人妻人人藻人人爽欧美一区 | 精品一区二区三区波多野结衣 | 伊人久久大香线蕉亚洲 | 免费观看黄网站 | av在线亚洲欧洲日产一区二区 | 少妇愉情理伦片bd | 美女毛片一区二区三区四区 | 99久久亚洲精品无码毛片 | 成人免费视频一区二区 | 亚洲无人区午夜福利码高清完整版 | 精品无码国产自产拍在线观看蜜 | 免费无码一区二区三区蜜桃大 | 亚洲区欧美区综合区自拍区 | 麻豆人妻少妇精品无码专区 | 日本在线高清不卡免费播放 | 国产在线精品一区二区高清不卡 | 日韩视频 中文字幕 视频一区 | 亚洲一区二区三区无码久久 | 亚洲精品久久久久avwww潮水 | 无码国产激情在线观看 | 帮老师解开蕾丝奶罩吸乳网站 | 国产手机在线αⅴ片无码观看 | 成人亚洲精品久久久久软件 | 99久久精品国产一区二区蜜芽 | 亚洲中文字幕久久无码 | 亚洲国产一区二区三区在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲中文字幕va福利 | 国产成人亚洲综合无码 | 欧美xxxxx精品 | 久久亚洲国产成人精品性色 | 国产在线一区二区三区四区五区 | 人人妻人人澡人人爽人人精品浪潮 | 激情内射日本一区二区三区 | 久久人人爽人人爽人人片av高清 | 国产69精品久久久久app下载 | 国产精品久久福利网站 | 亚洲自偷自偷在线制服 | 国产精品人人妻人人爽 | 亚洲精品一区二区三区在线观看 | 国产精品人人爽人人做我的可爱 | 国内少妇偷人精品视频 | 色老头在线一区二区三区 | 亚洲综合无码久久精品综合 | a在线观看免费网站大全 | 免费播放一区二区三区 | 久久精品国产亚洲精品 | 精品国产一区av天美传媒 | 国产av剧情md精品麻豆 | 久久人人爽人人爽人人片ⅴ | 性生交片免费无码看人 | 国产精品内射视频免费 | 色妞www精品免费视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产综合久久久久鬼色 | 波多野结衣aⅴ在线 | 国内精品久久毛片一区二区 | 亚洲日韩av片在线观看 | 亚拍精品一区二区三区探花 | 国产做国产爱免费视频 | 亚洲精品午夜无码电影网 | 色婷婷综合中文久久一本 | 55夜色66夜色国产精品视频 | 亚洲乱码日产精品bd | 久久久成人毛片无码 | 久久亚洲日韩精品一区二区三区 | 国产亚洲精品久久久久久国模美 | 天海翼激烈高潮到腰振不止 | 中文字幕无码av激情不卡 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品va在线播放 | 99精品久久毛片a片 | 性史性农村dvd毛片 | 午夜男女很黄的视频 | 国产女主播喷水视频在线观看 | 国产精品国产自线拍免费软件 | 无码国产激情在线观看 | 无码人妻少妇伦在线电影 | 亚洲人亚洲人成电影网站色 | 亚洲а∨天堂久久精品2021 | 久久国产精品偷任你爽任你 | 久久熟妇人妻午夜寂寞影院 | 午夜熟女插插xx免费视频 | 国语自产偷拍精品视频偷 | 国产极品视觉盛宴 | 呦交小u女精品视频 | 日韩人妻系列无码专区 | 国产麻豆精品精东影业av网站 | 中文亚洲成a人片在线观看 | 狠狠色丁香久久婷婷综合五月 | 精品国产福利一区二区 | 欧美大屁股xxxxhd黑色 | 国产精品无码成人午夜电影 | 日韩少妇白浆无码系列 | 日本护士xxxxhd少妇 | 国产精品美女久久久 | 亚洲一区二区三区香蕉 | 精品国精品国产自在久国产87 | 国产肉丝袜在线观看 | 欧美日韩一区二区免费视频 | 亚洲国产精品一区二区第一页 | 国产亚洲精品久久久久久久久动漫 | 国产精品久久久久影院嫩草 | 色欲人妻aaaaaaa无码 | 中文字幕无线码免费人妻 | 欧美日韩亚洲国产精品 | 无码国模国产在线观看 | 中文字幕无码日韩专区 | 日日天干夜夜狠狠爱 | 任你躁国产自任一区二区三区 | 少妇人妻av毛片在线看 | 国产成人无码av在线影院 | 女人高潮内射99精品 | 精品久久久久久亚洲精品 | 九九久久精品国产免费看小说 | 国产午夜亚洲精品不卡下载 | 精品一区二区三区波多野结衣 | 97夜夜澡人人爽人人喊中国片 | 亚洲呦女专区 | 国产色xx群视频射精 | 国产99久久精品一区二区 | 亚洲精品一区二区三区在线 | 精品久久久中文字幕人妻 | 久久久精品人妻久久影视 | 精品日本一区二区三区在线观看 | 丝袜美腿亚洲一区二区 | 日本一区二区三区免费高清 | 亚洲色无码一区二区三区 | 亚洲一区二区三区含羞草 | 亚洲国产欧美国产综合一区 | 国产无遮挡又黄又爽免费视频 | 亚洲七七久久桃花影院 | 1000部夫妻午夜免费 | 99视频精品全部免费免费观看 | 国产精品99爱免费视频 | 国产精品福利视频导航 | 欧美人与物videos另类 | 亚洲人亚洲人成电影网站色 | 久久久www成人免费毛片 | 精品少妇爆乳无码av无码专区 | 亚洲熟妇色xxxxx亚洲 | 国产激情无码一区二区 | 日日摸天天摸爽爽狠狠97 | 欧美性黑人极品hd | 亚洲一区二区三区在线观看网站 | 成年美女黄网站色大免费全看 | 一二三四社区在线中文视频 | 熟妇激情内射com | 日韩精品无码免费一区二区三区 | 久久99精品久久久久久动态图 | 无码一区二区三区在线 | 色一情一乱一伦一区二区三欧美 | 久久久久久国产精品无码下载 | 日韩成人一区二区三区在线观看 | 成人亚洲精品久久久久软件 | 人人澡人人妻人人爽人人蜜桃 | 99久久久无码国产aaa精品 | 夜夜高潮次次欢爽av女 | 精品国产福利一区二区 | 欧美成人免费全部网站 | 亚洲男人av天堂午夜在 | 麻豆av传媒蜜桃天美传媒 | 国产成人午夜福利在线播放 | 国产69精品久久久久app下载 | 国产亚洲视频中文字幕97精品 | 久久精品99久久香蕉国产色戒 | 国产精品沙发午睡系列 | 国産精品久久久久久久 | 一本色道久久综合亚洲精品不卡 | 女人被男人躁得好爽免费视频 | 扒开双腿疯狂进出爽爽爽视频 | 国产特级毛片aaaaaa高潮流水 | 亚洲乱码国产乱码精品精 | 天天躁日日躁狠狠躁免费麻豆 | 精品厕所偷拍各类美女tp嘘嘘 | 色狠狠av一区二区三区 | 久久99精品久久久久久动态图 | v一区无码内射国产 | 亚洲色偷偷偷综合网 | 精品日本一区二区三区在线观看 | 欧美成人家庭影院 | 国产亚洲美女精品久久久2020 | 18禁黄网站男男禁片免费观看 | 少妇无码av无码专区在线观看 | 久久综合给合久久狠狠狠97色 | 久久久无码中文字幕久... | 成人精品一区二区三区中文字幕 | 国产精品爱久久久久久久 | 国产特级毛片aaaaaa高潮流水 | 中文精品久久久久人妻不卡 | 九月婷婷人人澡人人添人人爽 | 国产小呦泬泬99精品 | 亚洲伊人久久精品影院 | 久久99热只有频精品8 | 亚洲色偷偷偷综合网 | 窝窝午夜理论片影院 | 伊人色综合久久天天小片 | 狂野欧美性猛交免费视频 | 人妻aⅴ无码一区二区三区 | 国产熟女一区二区三区四区五区 | 久久久久免费精品国产 | 日本饥渴人妻欲求不满 | 女人被爽到呻吟gif动态图视看 | 亚洲毛片av日韩av无码 | 国产综合久久久久鬼色 | 国产无遮挡又黄又爽免费视频 | 少妇无码吹潮 | 性史性农村dvd毛片 | 东北女人啪啪对白 | 色爱情人网站 | 精品国产精品久久一区免费式 | 天天av天天av天天透 | 国产人妖乱国产精品人妖 | 青草视频在线播放 | 国产精品国产三级国产专播 | 免费中文字幕日韩欧美 | 国精产品一品二品国精品69xx | 网友自拍区视频精品 | 少妇被黑人到高潮喷出白浆 | 欧美 亚洲 国产 另类 | 麻豆人妻少妇精品无码专区 | 少妇一晚三次一区二区三区 | 国产精品久久久久影院嫩草 | 国产精品对白交换视频 | 男人扒开女人内裤强吻桶进去 | 日本丰满熟妇videos | 中文久久乱码一区二区 | 一个人看的www免费视频在线观看 | 亚洲欧美精品aaaaaa片 | 亚洲高清偷拍一区二区三区 | 中文字幕av无码一区二区三区电影 | 日韩精品a片一区二区三区妖精 | 久久国产精品_国产精品 | 最新国产麻豆aⅴ精品无码 | 精品成在人线av无码免费看 | 国产亚洲精品久久久久久久 | 中文字幕久久久久人妻 | 国产成人无码a区在线观看视频app | 国产婷婷色一区二区三区在线 | 在线看片无码永久免费视频 | 久久精品丝袜高跟鞋 | 国产手机在线αⅴ片无码观看 | 骚片av蜜桃精品一区 | 亚洲欧洲中文日韩av乱码 | 永久免费观看国产裸体美女 | 国精品人妻无码一区二区三区蜜柚 | 国产无遮挡又黄又爽又色 | 久久精品人妻少妇一区二区三区 | 国产在线精品一区二区三区直播 | 狠狠色色综合网站 | 亚洲中文字幕va福利 | 亚洲欧洲无卡二区视頻 | 日韩精品成人一区二区三区 | 女人被爽到呻吟gif动态图视看 | 国产午夜手机精彩视频 | 亚洲欧美日韩成人高清在线一区 | 东京一本一道一二三区 | 国产一区二区三区日韩精品 | 欧美一区二区三区视频在线观看 | 亚洲精品成a人在线观看 | 东京无码熟妇人妻av在线网址 | 中文字幕人妻无码一区二区三区 | 男女爱爱好爽视频免费看 | 亚洲国产欧美国产综合一区 | 无码av中文字幕免费放 | 无码人妻精品一区二区三区下载 | 久久综合九色综合97网 | 强开小婷嫩苞又嫩又紧视频 | 天堂а√在线中文在线 | 免费国产成人高清在线观看网站 | 亚洲人成网站免费播放 | 四虎影视成人永久免费观看视频 | 国产成人综合色在线观看网站 | 色婷婷av一区二区三区之红樱桃 | 国产人妻精品一区二区三区 | 乱码av麻豆丝袜熟女系列 | 日欧一片内射va在线影院 | 草草网站影院白丝内射 | 男女下面进入的视频免费午夜 | 亚洲精品国产精品乱码视色 | 国产肉丝袜在线观看 | 欧美喷潮久久久xxxxx | 熟妇女人妻丰满少妇中文字幕 | 免费看少妇作爱视频 | 中文无码成人免费视频在线观看 | 欧美人与物videos另类 | 久久久久99精品成人片 | 国产精品.xx视频.xxtv | 丰满少妇女裸体bbw | 99精品无人区乱码1区2区3区 | 精品久久久中文字幕人妻 | 亚洲精品国偷拍自产在线观看蜜桃 | 老司机亚洲精品影院 | 欧美 日韩 人妻 高清 中文 | 永久免费精品精品永久-夜色 | 久久无码专区国产精品s | 最近免费中文字幕中文高清百度 | 国产精品无套呻吟在线 | 亚洲伊人久久精品影院 | 中文字幕 亚洲精品 第1页 | 欧美黑人性暴力猛交喷水 | 亚洲呦女专区 | av无码久久久久不卡免费网站 | 欧美性生交活xxxxxdddd | 亚洲色欲久久久综合网东京热 | 国产猛烈高潮尖叫视频免费 | 久久精品国产精品国产精品污 | 丰腴饱满的极品熟妇 | 无遮挡啪啪摇乳动态图 | 免费无码av一区二区 | 亚洲va中文字幕无码久久不卡 | 97精品国产97久久久久久免费 | 无码国内精品人妻少妇 | 亚洲精品美女久久久久久久 | 欧美三级a做爰在线观看 | 国产精品手机免费 | 内射后入在线观看一区 | 麻豆人妻少妇精品无码专区 | 国产精品亚洲五月天高清 | 精品国产一区二区三区四区在线看 | 西西人体www44rt大胆高清 | 在线欧美精品一区二区三区 | 97色伦图片97综合影院 | 成人亚洲精品久久久久软件 | 欧美一区二区三区 | 欧美乱妇无乱码大黄a片 | 国产成人精品优优av | 国产精品18久久久久久麻辣 | 狠狠cao日日穞夜夜穞av | 又大又黄又粗又爽的免费视频 | 亚洲一区二区三区偷拍女厕 | 秋霞成人午夜鲁丝一区二区三区 | 久久精品中文闷骚内射 | 日日夜夜撸啊撸 | 嫩b人妻精品一区二区三区 | 女人被爽到呻吟gif动态图视看 | 无码人中文字幕 | 色欲久久久天天天综合网精品 | 强伦人妻一区二区三区视频18 | 漂亮人妻洗澡被公强 日日躁 | 四虎国产精品一区二区 | 国产电影无码午夜在线播放 | 久久国产劲爆∧v内射 | ass日本丰满熟妇pics | 麻豆精品国产精华精华液好用吗 | 精品国产一区二区三区av 性色 | 精品国产成人一区二区三区 | 国产av剧情md精品麻豆 | 永久免费精品精品永久-夜色 | 搡女人真爽免费视频大全 | 成人av无码一区二区三区 | 性色欲情网站iwww九文堂 | 四虎4hu永久免费 | 日日鲁鲁鲁夜夜爽爽狠狠 | 小泽玛莉亚一区二区视频在线 | 少妇一晚三次一区二区三区 | 无码人中文字幕 | av无码不卡在线观看免费 | 最近中文2019字幕第二页 | 色妞www精品免费视频 | 久久亚洲a片com人成 | 亚洲の无码国产の无码步美 | 久久久久久亚洲精品a片成人 | 麻豆国产丝袜白领秘书在线观看 | 国产做国产爱免费视频 | 四虎永久在线精品免费网址 | 亚洲精品一区二区三区大桥未久 | 免费中文字幕日韩欧美 | 日本xxxx色视频在线观看免费 | 久久 国产 尿 小便 嘘嘘 | 欧美一区二区三区 | 黑人巨大精品欧美一区二区 | 图片小说视频一区二区 | 久久久久久九九精品久 | 中文字幕人妻丝袜二区 | 蜜桃无码一区二区三区 | 亚洲最大成人网站 | 国产亚洲日韩欧美另类第八页 | 熟女体下毛毛黑森林 | 在线a亚洲视频播放在线观看 | 九九久久精品国产免费看小说 | 国产成人无码区免费内射一片色欲 | 午夜福利一区二区三区在线观看 | 99视频精品全部免费免费观看 | 国産精品久久久久久久 | 国产性生交xxxxx无码 | 日韩少妇内射免费播放 | 在线精品亚洲一区二区 | 麻豆精品国产精华精华液好用吗 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产午夜亚洲精品不卡下载 | 性色欲情网站iwww九文堂 | 欧美熟妇另类久久久久久不卡 | 九九在线中文字幕无码 | 久久精品中文字幕大胸 | 亚洲精品www久久久 | a片免费视频在线观看 | 国产两女互慰高潮视频在线观看 | 国产成人精品一区二区在线小狼 | 国产无遮挡又黄又爽又色 | 精品国产一区二区三区四区在线看 | 欧美日本免费一区二区三区 | 3d动漫精品啪啪一区二区中 | 国产精品资源一区二区 | 国产绳艺sm调教室论坛 | 99精品无人区乱码1区2区3区 | 国产成人综合色在线观看网站 | 18精品久久久无码午夜福利 | 日日天日日夜日日摸 | 又大又紧又粉嫩18p少妇 | 午夜肉伦伦影院 | 一本久久a久久精品vr综合 | 熟女体下毛毛黑森林 | 中文字幕日韩精品一区二区三区 | 中国大陆精品视频xxxx | 男女性色大片免费网站 | 图片小说视频一区二区 | 精品国产一区二区三区四区在线看 | 色一情一乱一伦一视频免费看 | 日韩精品乱码av一区二区 | 亚洲第一无码av无码专区 | 国产精品手机免费 | 欧美日韩视频无码一区二区三 | 99re在线播放 | 国产精品99久久精品爆乳 | 国产av剧情md精品麻豆 | 亚洲性无码av中文字幕 | 日本一区二区三区免费播放 | 熟妇人妻中文av无码 | 一区二区三区高清视频一 | 内射爽无广熟女亚洲 | 国产精品igao视频网 | 亚洲综合在线一区二区三区 | 无遮挡国产高潮视频免费观看 | 学生妹亚洲一区二区 | 亚洲爆乳精品无码一区二区三区 | 55夜色66夜色国产精品视频 | 国产欧美亚洲精品a | 水蜜桃亚洲一二三四在线 | 1000部夫妻午夜免费 | 亚洲综合另类小说色区 | 成人性做爰aaa片免费看 | 在线精品国产一区二区三区 | 小sao货水好多真紧h无码视频 | 人人爽人人爽人人片av亚洲 | 国产精华av午夜在线观看 | 99国产欧美久久久精品 | 精品无码国产一区二区三区av | 强伦人妻一区二区三区视频18 | 日产精品高潮呻吟av久久 | 国内精品久久毛片一区二区 | 亚洲国产成人av在线观看 | 国精产品一品二品国精品69xx | 狠狠色丁香久久婷婷综合五月 | 高潮毛片无遮挡高清免费 | 亚洲の无码国产の无码步美 | 国产亚洲精品久久久久久久 | 一个人免费观看的www视频 | 欧美激情内射喷水高潮 | 亚洲精品一区二区三区在线 | 成人一在线视频日韩国产 | 丰满人妻被黑人猛烈进入 | 中文字幕+乱码+中文字幕一区 | 人人妻人人澡人人爽欧美精品 | 樱花草在线播放免费中文 | 97夜夜澡人人爽人人喊中国片 | 国产成人综合美国十次 | 久久久久久久人妻无码中文字幕爆 | 日本一卡二卡不卡视频查询 | 国产精品视频免费播放 | 国产乱子伦视频在线播放 | 日韩亚洲欧美中文高清在线 | 国产97在线 | 亚洲 | 日日摸夜夜摸狠狠摸婷婷 | 精品一二三区久久aaa片 | 中文字幕精品av一区二区五区 | 国产精品福利视频导航 | 在线а√天堂中文官网 | 日产国产精品亚洲系列 | 亚洲日本一区二区三区在线 | 免费观看又污又黄的网站 | 亚洲日韩av一区二区三区四区 | 免费中文字幕日韩欧美 | 18精品久久久无码午夜福利 | 国产美女极度色诱视频www | 日日干夜夜干 | 午夜精品久久久久久久久 | 少妇被黑人到高潮喷出白浆 | 激情内射亚州一区二区三区爱妻 | 亚洲va中文字幕无码久久不卡 | 久久久久亚洲精品男人的天堂 | 奇米影视7777久久精品人人爽 | 清纯唯美经典一区二区 | 国产精品人妻一区二区三区四 | 精品人妻人人做人人爽夜夜爽 | 亚洲aⅴ无码成人网站国产app | 免费网站看v片在线18禁无码 | 国产精品亚洲一区二区三区喷水 | 97久久超碰中文字幕 | 欧美老妇交乱视频在线观看 | 亚洲成熟女人毛毛耸耸多 | 国产亚洲美女精品久久久2020 | 久青草影院在线观看国产 | 亚洲欧美国产精品专区久久 | 国产内射爽爽大片视频社区在线 | 国产亚洲精品久久久闺蜜 | 中文无码成人免费视频在线观看 | 蜜臀av在线播放 久久综合激激的五月天 | 国产综合色产在线精品 | 国产成人精品视频ⅴa片软件竹菊 | 在线看片无码永久免费视频 | 夜精品a片一区二区三区无码白浆 | 国产精品无码mv在线观看 | 国产精品怡红院永久免费 | 国内老熟妇对白xxxxhd | 狂野欧美性猛xxxx乱大交 | 亚洲人亚洲人成电影网站色 | 久久精品视频在线看15 | 国产色精品久久人妻 | 最新国产乱人伦偷精品免费网站 | 国产69精品久久久久app下载 | 日本欧美一区二区三区乱码 | 西西人体www44rt大胆高清 | 国产午夜福利亚洲第一 | 亚洲中文字幕在线无码一区二区 | 狠狠综合久久久久综合网 | 国产无遮挡吃胸膜奶免费看 | 日韩精品成人一区二区三区 | 精品国产成人一区二区三区 | 88国产精品欧美一区二区三区 | 精品国产av色一区二区深夜久久 | 久久亚洲日韩精品一区二区三区 | 一本久道高清无码视频 | 扒开双腿吃奶呻吟做受视频 | 午夜成人1000部免费视频 | 亚洲色大成网站www国产 | 国产成人精品优优av | 色综合久久久久综合一本到桃花网 | 国产偷国产偷精品高清尤物 | 欧美丰满少妇xxxx性 | 欧洲极品少妇 | 狂野欧美激情性xxxx | 精品厕所偷拍各类美女tp嘘嘘 | 久久成人a毛片免费观看网站 | 日韩av无码一区二区三区 | 中文字幕无线码 | 特级做a爰片毛片免费69 | 精品国产乱码久久久久乱码 | 中文字幕色婷婷在线视频 | 伊人色综合久久天天小片 | 亚洲日韩乱码中文无码蜜桃臀网站 | 免费看男女做好爽好硬视频 | 荫蒂添的好舒服视频囗交 | 又粗又大又硬又长又爽 | 国产69精品久久久久app下载 | 国产亚洲精品久久久久久大师 | 无码人妻久久一区二区三区不卡 | 国产亚洲精品久久久闺蜜 | 日本大香伊一区二区三区 | 中文字幕人成乱码熟女app | 国产高潮视频在线观看 | 国产免费久久久久久无码 | 国产乱人伦av在线无码 | 亚洲国精产品一二二线 | 精品无码av一区二区三区 | 任你躁国产自任一区二区三区 | 东京一本一道一二三区 | 黑人巨大精品欧美一区二区 | 丰满护士巨好爽好大乳 | 亚洲爆乳大丰满无码专区 | 亚洲熟女一区二区三区 | 国产亚洲tv在线观看 | 亚洲成av人片在线观看无码不卡 | 婷婷六月久久综合丁香 | 狂野欧美激情性xxxx | 国产午夜无码视频在线观看 | 国产人妻精品一区二区三区 | 精品国产一区二区三区四区 | 动漫av一区二区在线观看 | 亚洲熟妇色xxxxx欧美老妇y | 日韩亚洲欧美精品综合 | 亚洲天堂2017无码中文 |