Ticket #5267: submit.patch
File submit.patch, 5.7 KB (added by , 13 years ago) |
---|
-
src/event.js
63 63 var handlers = events[ type ], 64 64 special = this.special[ type ] || {}; 65 65 66 if ( special.add ) {67 var modifiedHandler = special.add.call( elem, handler, data, namespaces );68 if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) {69 modifiedHandler.guid = modifiedHandler.guid || handler.guid;70 handler = modifiedHandler;71 }72 }73 74 // Init the event handler queue75 66 if ( !handlers ) { 76 67 handlers = events[ type ] = {}; 77 68 … … 88 79 } 89 80 } 90 81 82 if ( special.add ) { 83 var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); 84 if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { 85 modifiedHandler.guid = modifiedHandler.guid || handler.guid; 86 handler = modifiedHandler; 87 } 88 } 89 91 90 // Add the function to the element's handler list 92 91 handlers[ handler.guid ] = handler; 93 92 … … 109 108 return; 110 109 } 111 110 112 var events = jQuery.data( elem, "events" ), ret, type ;111 var events = jQuery.data( elem, "events" ), ret, type, fn; 113 112 114 113 if ( events ) { 115 114 // Unbind all events for the element … … 139 138 if ( events[ type ] ) { 140 139 // remove the given handler for the given type 141 140 if ( handler ) { 141 var fn = events[ type ][ handler.guid ] 142 142 delete events[ type ][ handler.guid ]; 143 143 144 144 // remove all handlers for the given type … … 152 152 } 153 153 154 154 if ( special.remove ) { 155 special.remove.call( elem, namespaces );155 special.remove.call( elem, namespaces, fn ); 156 156 } 157 157 158 158 // remove generic event handler if no more handlers exist … … 402 402 }, 403 403 404 404 live: { 405 add: function( proxy, data, namespaces ) {405 add: function( proxy, data, namespaces, live ) { 406 406 jQuery.extend( proxy, data || {} ); 407 proxy.guid += data.selector + data.live; 408 jQuery.event.add( this, data.live, liveHandler, data ); 407 if(data.live == "submit" && !jQuery.support.submitBubbles){ 408 jQuery.event.special.live.special[data.live].apply(this,arguments) 409 proxy.guid += data.selector + data.live; 410 }else{ 411 proxy.guid += data.selector + data.live; 412 jQuery.event.add( this, data.live, liveHandler, data ); 413 } 409 414 }, 410 411 415 remove: function( namespaces ) { 412 416 if ( namespaces.length ) { 413 417 var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); … … 422 426 jQuery.event.remove( this, namespaces[0], liveHandler ); 423 427 } 424 428 } 425 } 429 }, 430 special:{} 426 431 } 427 432 } 428 433 }; … … 534 539 }; 535 540 }); 536 541 542 543 //if(!jQuery.support.submitBubbles) 537 544 (function() { 538 539 545 var event = jQuery.event, 540 special = event.special, 541 handle = event.handle; 546 special = event.special.live.special, 547 handle = event.handle, beforeFilter = { 548 click: function(e){ 549 return jQuery(e.target).filter(":submit, :image").length 550 }, 551 keypress : function(e){ 552 return jQuery(e.target).filter(":text, :password").length && e.keyCode == 13 553 } 554 }; 542 555 543 special.submit = { 544 setup: function(data, namespaces) { 545 if(data.selector) { 546 event.add(this, 'click.specialSubmit', function(e, eventData) { 547 if(jQuery(e.target).filter(":submit, :image").closest(data.selector).length) { 548 e.type = "submit"; 549 return handle.call( this, e, eventData ); 550 } 551 }); 552 553 event.add(this, 'keypress.specialSubmit', function( e, eventData ) { 554 if(jQuery(e.target).filter(":text, :password").closest(data.selector).length) { 555 e.type = "submit"; 556 return handle.call( this, e, eventData ); 557 } 558 }); 559 } else { 560 return false; 556 special.submit = function(proxy, data, namespaces, live ) { 557 data.beforeFilter = beforeFilter 558 proxy.altLive = ["click","keypress"] 559 proxy.altLiveGUIDs = { 560 click : proxy.guid+data.selector+"special.click", 561 keypress : proxy.guid+data.selector+"special.keypress" 561 562 } 562 }, 563 564 remove: function(namespaces) { 565 event.remove(this, 'click.specialSubmit'); 566 event.remove(this, 'keypress.specialSubmit'); 563 jQuery.event.add( this, "click", liveHandler, data ); 564 live[proxy.altLiveGUIDs.click] = true; 565 jQuery.event.add( this, "keypress", liveHandler, data ); 566 live[proxy.altLiveGUIDs.keypress] = true; 567 567 } 568 }; 568 569 569 570 570 })(); 571 571 … … 742 742 var stop = true, elems = [], args = arguments; 743 743 744 744 jQuery.each( jQuery.data( this, "events" ).live || [], function( i, fn ) { 745 if ( fn.live === event.type ) { 745 if (jQuery.isFunction(fn) && fn.live === event.type || (fn.altLive && jQuery.inArray(event.type, fn.altLive)>=-1 ) ) { 746 var data= fn.data; 747 if(data.beforeFilter && data.beforeFilter[event.type] && !data.beforeFilter[event.type](event)) 748 return; 746 749 var elem = jQuery( event.target ).closest( fn.selector )[0]; 747 750 if ( elem ) { 748 751 elems.push({ elem: elem, fn: fn }); -
src/support.js
78 78 }); 79 79 div.cloneNode(true).fireEvent("onclick"); 80 80 } 81 81 var eventSupported = function(eventName) { 82 var el = document.createElement('div'); 83 eventName = 'on' + eventName; 84 var isSupported = (eventName in el); 85 if (!isSupported) { 86 el.setAttribute(eventName, 'return;'); 87 isSupported = typeof el[eventName] == 'function'; 88 } 89 el = null; 90 return isSupported; 91 } 92 jQuery.support.submitBubbles = eventSupported("submit") 93 82 94 // Figure out if the W3C box model works as expected 83 95 // document.body must exist before we can do this 84 96 jQuery(function(){