Changeset 4294
- Timestamp:
- 12/21/07 09:52:34 (1 year ago)
- Location:
- trunk/plugins/accordion
- Files:
-
- 2 modified
-
lib/jquery.js (modified) (9 diffs)
-
test/leak.html (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugins/accordion/lib/jquery.js
r4275 r4294 7 7 * and GPL (GPL-LICENSE.txt) licenses. 8 8 * 9 * $Date: 2007-12-2 0 14:36:56 +0100 (Don, 20Dez 2007) $10 * $Rev: 42 51$9 * $Date: 2007-12-21 06:47:33 +0100 (Fre, 21 Dez 2007) $ 10 * $Rev: 4293 $ 11 11 */ 12 12 … … 325 325 if ( events === true ) 326 326 this.find("*").andSelf().each(function(i){ 327 if (this.nodeType == 3) 328 return; 327 329 var events = jQuery.data( this, "events" ); 328 330 … … 934 936 // Fix "XHTML"-style tags in all browsers 935 937 elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ 936 return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area )$/i) ?938 return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? 937 939 all : 938 940 front + "></" + tag + ">"; … … 1841 1843 return val; 1842 1844 1843 val = jQuery.event.handle.apply( elem, arguments);1845 val = jQuery.event.handle.apply(arguments.callee.elem, arguments); 1844 1846 1845 1847 return val; 1846 1848 }); 1849 // Add elem as a property of the handle function 1850 // This is to prevent a memory leak with non-native 1851 // event in IE. 1852 handle.elem = elem; 1847 1853 1848 1854 // Handle multiple events seperated by a space … … 1879 1885 jQuery.event.global[type] = true; 1880 1886 }); 1887 1888 // Nullify elem to prevent memory leaks in IE 1889 elem = null; 1881 1890 }, 1882 1891 … … 1942 1951 for ( ret in events ) break; 1943 1952 if ( !ret ) { 1953 var handle = jQuery.data( elem, "handle" ); 1954 if ( handle ) handle.elem = null; 1944 1955 jQuery.removeData( elem, "events" ); 1945 1956 jQuery.removeData( elem, "handle" ); … … 2055 2066 2056 2067 fix: function(event) { 2057 // Short-circuit if the event has already been fixed by jQuery.event.fix2058 if ( event[ expando ] )2059 return event;2060 2061 2068 // store a copy of the original event object 2062 2069 // and clone to set read-only properties 2063 2070 var originalEvent = event; 2064 2071 event = jQuery.extend({}, originalEvent); 2065 2066 // Mark the event as fixed by jQuery.event.fix2067 event[ expando ] = true;2068 2072 2069 2073 // add preventDefault and stopPropagation since … … 2270 2274 2271 2275 // Trigger any bound ready events 2272 $(document).triggerHandler("ready");2276 jQuery(document).triggerHandler("ready"); 2273 2277 } 2274 2278 } … … 2983 2987 2984 2988 return this.each(function(){ 2985 if ( this.nodeType != 1)2986 return;2987 2988 2989 if ( fn.constructor == Array ) 2989 2990 queue(this, type, fn); -
trunk/plugins/accordion/test/leak.html
r4288 r4294 7 7 <link rel="stylesheet" href="../demo/demo.css" /> 8 8 <script type="text/javascript" src="../lib/jquery.js"></script> 9 <script type="text/javascript" src="../lib/jquery.dimensions.js"></script> 9 10 <script type="text/javascript"> 11 $.fn.extend({ 12 leak: function() { 13 var container = this; 14 return this.bind("click", function clickHandler() {}); 15 } 16 }); 17 10 18 $(function() { 11 // leaks like hell in IE 12 jQuery('#list2').change(function() {}); 19 jQuery('#list2') 20 .leak() 21 .change(function() {}); 13 22 }); 14 23 </script> … … 18 27 19 28 <dl id="list2"> 29 <dt class="red">Red</dt> 30 <dd> 31 Fancy stuff about red thingies. 32 </dd> 33 <dt class="green selected">Green</dt> 34 <dd> 35 Green! Green! Green! 36 </dd> 37 <dt class="blue">Blue</dt> 38 <dd> 39 Cool kids are blue. 40 </dd> 20 41 </dl> 21 42 </body>
