-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 に答える