-2

我有这个代码

if( !mobilecheck() ) {

            this.menu.addEventListener( 'mouseover', function(ev) {
                self._openMenu(); 
                document.addEventListener( self.eventtype, self.bodyClickFn ); 
            } );
            this.submenu1.addEventListener( 'mouseover', function(ev) {
                self._openSubMenu1(); 
                document.addEventListener( self.eventtype, self.bodyClickFn ); 
            } );
            this.submenu2.addEventListener( 'mouseover', function(ev) {
                self._openSubMenu2(); 
                document.addEventListener( self.eventtype, self.bodyClickFn ); 
            } );
        }

我希望能够替换

this.submenu1.addEventListener( 'mouseover', function(ev) {
                    self._openSubMenu1(); 
                    document.addEventListener( self.eventtype, self.bodyClickFn ); 
                } );

this.submenu[i].addEventListener( 'mouseover', function(ev) {
                    self._openSubMenu[i](); 
                    document.addEventListener( self.eventtype, self.bodyClickFn ); 
                } );

并以这种方式简化代码。

我用过

for (var i = 0; i <= 2; i++) { code above }

但我在 Firebug 中得到“TypeError:this.submenu[i] is undefined”。

我是 javascript 和 jquery 的初学者,所以这对我来说并不容易。

4

1 回答 1

1

假设您真正想要做的是避免重复代码并[i]用作访问每个变量的索引,那么您可以通过将 jQuery 对象放入数组而不是单个变量来做到这一点。你可以替换这个:

this.subtrigger = [];
this.subtrigger[0] = this.el.querySelector( '.submenu0' );
this.subtrigger[1] = this.el.querySelector( '.submenu1' );    
this.subtrigger[2] = this.el.querySelector( '.submenu2' );

有了这样的东西,你可以通过索引访问它们。

this.subtrigger = [];
for (var i = 0; i <= 2; i++) {
    this.subtrigger[i] = this.el.querySelector('.submenu' + i);
}

注意:如果您的第一个对象没有"0"后缀,那么您将不得不对该对象的代码进行特殊处理。

于 2013-08-10T06:33:52.187 回答