2015-03-13 72 views
0

我在初始頁面加載後從全局名稱空間調用jquery定義的函數時遇到問題。基於頁面加載罰款最初我下面的代碼,但是當我嘗試打電話給我,我收到以下異常onchange事件:jQuery的全局命名空間問題函數

Uncaught TypeError: undefined is not a function 

我的jQuery代碼看起來是這樣的:

(function ($) { 

    $(document).ready(function() { 

     var user_id = $('#user_id').val(); 
     var identifier = $('#identifier').val(); 

     $.getPostFeed(user_id, identifier); 

     $(document).on("change", "#postFilter", function(e) { 
      e.preventDefault(); 
      $.GetPostFeed(user_id, identifier); 
     }); 

    }); 

    jQuery.getPostFeed = function getPostFeed(user_id, identifier) { 

     console.log("Function Called"); 
    } 

}(jQuery)); 

當我第一次加載頁面,GetPostFeed函數執行成功,但是當我在onchange事件上執行時,出現以下錯誤:

Uncaught TypeError: undefined is not a function 

錯誤指向change事件中的GetPostFeed函數調用。

任何想法,爲什麼發生這種情況?

感謝, - 保羅

+1

'GetPostFeed'的所有其他實例都有一個小寫'g'。 – Matt 2015-03-13 12:40:49

+0

廢話...不敢相信我錯過了。這是問題。 – Paul 2015-03-13 12:42:03

回答

1

發現問題由馬特指出。 jquery區分大小寫。感謝馬特

0

當你定義一個函數作爲一個表達式,參數緊跟在function關鍵字。嘗試改變

jQuery.getPostFeed = function getPostFeed(user_id, identifier) {

jQuery.getPostFeed = function(user_id, identifier) {

+0

'jQuery.getPostFeed = function getPostFeed(user_id,identifier){}'的語法在JavaScript代碼中是完全有效的,請在瀏覽器的控制檯中嘗試! ;) – pomeh 2015-03-13 12:58:06

+0

是的,你是對的,這是**有效**,我不知道!無用的國際海事組織,雖然,因爲在'var x = function y(args){...}'標識符'y'是一種聲明,但可以達到rever。使可讀性/代碼不可讀。 – randombumper 2015-03-14 14:15:43

+0

它比你想象的更有用:)標識符'y'在函數本身內部(而且只在那裏)是可到達的,所以它可能用於某種遞歸。在堆棧跟蹤中使用'function y'而不是一堆'(匿名函數)'也是很有用的。你可以在這裏http://kangax.github.io/nfe/和這裏https:// medium瞭解更多。COM/@ cramforce /上最迷死-OF-FN-顯示名稱,9511933a714a。 – pomeh 2015-03-16 08:39:30

-1

如果你使用一個命名空間的全球性,那麼你必須使用總是相同的。

Ex。如果您使用$,那麼在所有地方您都應該使用相同的功能$而不是使用關鍵字jQuery

嘗試下面的代碼:

(function ($) { 

    $(document).ready(function() { 
    var user_id = $('#user_id').val(); 
    var identifier = $('#identifier').val(); 

    $.getPostFeed(user_id, identifier); 

     $(document).on("change", "#postFilter", function(e) { 
      e.preventDefault(); 
      $.GetPostFeed(user_id, identifier); 
     }); 

    }); 

    $.getPostFeed = function getPostFeed(user_id, identifier) { 

     console.log("Function Called"); 
    } 

}($)); 
0

我收到了你的問題:

<script> 
    //use 
    $.getPostFeed(user_id, identifier); 
    //instead of 
    // $.GetPostFeed(user_id, identifier); 
    </script> 

它只是一個字母的情況下問題:使用 「getPostFeed」,而不是 「GetPostFeed」。

要麼你很好。