2011-03-09 198 views
2

我可以在不從App.site.profile調用selectCompanyJump(this)的情況下在內部調用它嗎?Javascript可變範圍

而不是在做App.site.profile.selectStateJump(this);我可以像parent.selectStateJump(this);那樣做,而不需要在.change()調用之外重新指定this嗎?

$(document).ready(function() { 
    App.site = function() { 
     return { 
      init: function() { 
       this.profile.init(); 
      }, 
      profile: function() { 
       var profile; 

       return { 
        init: function() { 
         profile = $('div#profile'); 

         $('select[name="company_id"]', profile).change(function() { 
          App.site.profile.selectCompanyJump(this); 
         }); 

         $('select[name="state_id"]', profile).change(function() { 
          App.site.profile.selectStateJump(this); 
         }); 
        }, 
        selectCompanyJump: function (select) { 
         $(select.parent()).submit(); 
        }, 
        selectStateJump: function (select) { 
         $(select.parent()).submit(); 
        } 
       } 
      }() 
     } 
    }(); 

    App.site.init(); 
}); 

回答

1

您可以參考你想要的另一個變量之外的變化()函數的定義中的「這個」範圍:

 profile: function() { 
      var profile; 

      return { 
       init: function() { 
        profile = $('div#profile'); 
        var self = this; 

        $('select[name="company_id"]', profile).change(function() { 
         self.selectCompanyJump(this); 
        }); 

        $('select[name="state_id"]', profile).change(function() { 
         self.selectStateJump(this); 
        }); 
       }, 
       selectCompanyJump: function (select) { 
        $(select.parent()).submit(); 
       }, 
       selectStateJump: function (select) { 
        $(select.parent()).submit(); 
       } 
      } 
     }() 
0

,你可以做以下

$(document).ready(function() { 
App.site = function() { 
    var me = this; 
    me.selectStateJump = function selectStateJump (select) { 
        $(select.parent()).submit(); 
       } 
    return { 
      .... 
      selectStateJump: selectStateJump 
    } 

,你就能夠調用剛剛me.selectStateJump()

編輯:

實際上下面就足以

$(document).ready(function() { 
    App.site = function() { 
     function selectStateJump (select) { 
       $(select.parent()).submit(); 
     } 
return { 
     method : function(select) { 
      selectStateJump(select); 
     } 
     selectStateJump: selectStateJump 
} 
+0

你設置'me'是一個全局變量,'VAR我= this'更好 – meouw 2011-03-09 20:30:25

+0

@meouw - 實際上'變種我= this'是我打算寫,謝謝! – vittore 2011-03-10 01:27:43

0

假設你只是用你的函數選擇參數引用觸發事件的元素您只需將指針傳遞給事件聯編程序,然後使用this關鍵字即可。

profile: function() { 
      var profile; 

      return { 
       init: function() { 
        profile = $('div#profile'); 
        $('name="state_id"', profile).change(this.selectStateJump); 

       }, 
       selectStateJump: function() { 
        $(this).parent().submit(); 
       } 
      }