OSDN Git Service

Version 0.6.25, bugfix.
[pettanr/clientJs.git] / 0.6.x / js / core / 06_XEventDispatcher.js
index 5c4aac4..29ff847 100644 (file)
@@ -42,30 +42,35 @@ X.EventDispatcher =
                        },\r
                        unlisten : function( type, arg1, arg2, arg3 ){\r
                                var list = this._listeners,\r
-                                       unlistens, i, f;\r
+                                       _list, reservess, unlistens, i, f;\r
                                if( !list ) return this;\r
                                if( type === undefined ){\r
                                        // 全て削除\r
                                        for( type in list ){\r
-                                               this.unlisten( type ); // override されていることがあるので、必ず unlisten を使用\r
+                                               _list = list[ type ];\r
+                                               if( !( i = _list.length ) ) continue;\r
+                                               for( ; i; ){\r
+                                                       this.unlisten( type, _list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+                                               };\r
+                                               // this.unlisten( type ); これは無茶!\r
                                        };\r
                                        return this;\r
                                };\r
                                if( arg1 === undefined ){\r
                                        // 同一タイプを全て削除\r
-                                       if( !( list = list[ type ] ) ) return this;\r
-                                       for( i = list.length; i; ){\r
-                                               this.unisten( type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+                                       if( !( list = list[ type ] ) || !( i = list.length ) ) return this;\r
+                                       for( ; i; ){\r
+                                               this.unlisten( type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
                                        };\r
                                        return this;\r
                                };\r
                                \r
-                               if( this._reserves ){\r
-                                       for( i = this._reserves.length; i; ){\r
-                                               f = this._reserves[ --i ];\r
+                               if( reserves = this._reserves ){\r
+                                       for( i = reserves.length; i; ){\r
+                                               f = reserves[ --i ];\r
                                                if( f[ 0 ] === type && f[ 1 ] === arg1 && f[ 2 ] === arg2 && f[ 3 ] === arg3 ){\r
-                                                       this._reserves.splice( i, 1 );\r
-                                                       if( !this._reserves.legth ) delete this._reserves;\r
+                                                       reserves.splice( i, 1 );\r
+                                                       if( !reserves.legth ) delete this._reserves;\r
                                                        return this;\r
                                                };\r
                                        };\r