2013-09-24 146 views
3

我試圖調用嵌套功能無法正常工作
這裏是我試過jsfiddle如何調用jQuery的嵌套函數

腳本:

(function($){ 
     $.fn.investPage = function() {  
      function setupFCConfig(){ 
       $('.nestedFunction').click(function(){ 
        alert('setupFCConfig func()'); 
       }); 
      } 
      $(".edit").on('click', function(){ 
       alert('edit click func()'); 
      }); 
      $(".cancel").on('click', function(){   
       alert('cancel click func()'); 
      }); 
      $(".checkout").click(function(){   
       alert('checkout click func()'); 
      }); 
     }; 
})(jQuery); 

$.fn.investPage(); 
$.fn.investPage.setupFCConfig(); 
+0

你拼錯'click'爲'clicl 'in'setupFCConfig()' – CodingIntrigue

+0

有一個錯字,'clicl'應該是'click' –

回答

4

setupFCConfig()沒有的屬性$ .fn.investPage對象,所以它不能這樣調用:

$.fn.investPage.setupFCConfig(); 

這是一個局部函數th在聲明的範圍之外不可用。如果您希望它可以從外部作用域中獲得,那麼您需要將其分配爲該外部作用域中可用的某個對象的屬性。

例如,你可以改變該函數的定義是這樣的:

(function($){ 
     $.fn.investPage = function() {  
      $(".edit").on('click', function(){ 
       alert('edit click func()'); 
      }); 
      $(".cancel").on('click', function(){   
       alert('cancel click func()'); 
      }); 
      $(".checkout").click(function(){   
       alert('checkout click func()'); 
      }); 

     }; 
     $.fn.investPage.setupFCConfig = function(){ 
      $('.nestedFunction').click(function(){ 
       alert('setupFCConfig func()'); 
      }); 
     } 

})(jQuery); 

$.fn.investPage(); 
$.fn.investPage.setupFCConfig(); 

僅供參考,您還需要修復的.click拼寫錯誤。

3

您使用了錯誤的餘地功能

(function($){ 
     $.fn.investPage = function() {  
      $(".edit").on('click', function(){ 
       alert('edit click func()'); 
      }); 
      $(".cancel").on('click', function(){   
       alert('cancel click func()'); 
      }); 
      $(".checkout").click(function(){   
       alert('checkout click func()'); 
      }); 
     }; 
     $.fn.investPage.setupFCConfig = function(){ 
      $('.nestedFunction').click(function(){ 
       alert('setupFCConfig func()'); 
      }); 
     }; 
})(jQuery); 

JSFiddle

(function($){ 
     $.fn.investPage = function() { 
      this.setupFCConfig = function(){ 
       $('.nestedFunction').click(function(){ 
        alert('setupFCConfig func()'); 
       }); 
      };   
      $(".edit").on('click', function(){ 
       alert('edit click func()'); 
      }); 
      $(".cancel").on('click', function(){   
       alert('cancel click func()'); 
      }); 
      $(".checkout").click(function(){   
       alert('checkout click func()'); 
      }); 
      return this; 
     }; 
})(jQuery); 

var page = $.fn.investPage(); 
page.setupFCConfig(); 

JSFiddle

第二返回investPage對象,你可以比訪問功能f rom對象變量。

2

使用這種方式jsFiddle updated$.fn.investPagethis範圍不是$.fn.investPage對象。所以你的對象不知道知道的功能setupFCConfig()

但是你可以使用:

$.fn.investPage.setupFCConfig = function(){ 
    $('.nestedFunction').click(function(){ 
      alert('setupFCConfig func()'); 
    }); 
}; 

才達到你的目標。

1

更改代碼:

(function($){ 
    $.fn.investPage = function() {  
     this.setupFCConfig: function(){ 
      $('.nestedFunction').click(function(){ 
       alert('setupFCConfig func()'); 
      }); 
     }; 
     $(".edit").on('click', function(){ 
      alert('edit click func()'); 
     }); 
     $(".cancel").on('click', function(){   
      alert('cancel click func()'); 
     }); 
     $(".checkout").click(function(){   
      alert('checkout click func()'); 
     }); 
    }; 
})(jQuery); 

var instance = $.fn.investPage(); 
instance.setupFCConfig(); 
+0

這不會起作用,因爲你沒有'investPage'的實例,要訪問t他setupFCConfig方法就像你在底部,你將不得不將其更改爲investPage屬性,即:'$ .fn.investPage.setupFCConfig = function' –

+0

我已編輯它,謝謝! –

1

可以使一個對象,並用它來命名空間像下面太

investPage = { 
     init: function() { 
      $(".edit").on('click', function(){ 
       alert('edit click func()'); 
      }); 
      $(".cancel").on('click', function(){   
       alert('cancel click func()'); 
      }); 
      $(".checkout").click(function(){   
       alert('checkout click func()'); 
      }); 
      }, 
     setupFCConfig: function(){ 
      $('.nestedFunction').click(function(){ 
        alert('setupFCConfig func()'); 
      }); 
     } 
    } 


investPage.init(); 
investPage.setupFCConfig(); 

http://jsfiddle.net/LaUaE/12/