2015-03-13 2 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 

Ошибка указывает на вызов функции GetPostFeed в событии изменения.

Любая идея, почему это происходит?

Спасибо, -Поль

+1

Все остальные экземпляры 'GetPostFeed' имеют строчные буквы' g'. – Matt

+0

дерьмо ... не могу поверить, я пропустил это. Это была проблема. – Paul

ответ

1

Найдено вопрос, как отметил Мэтт. jQuery чувствителен к регистру. Благодаря Matt

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

+0

Да, вы правы, это ** действительно **, и я этого не знал !. Бесполезная ИМО, хотя, поскольку в 'var x = function y (args) {...}' идентификатор 'y' является своего рода объявленным, но доступен для достижения. Делает для менее читаемого/mainteable кода. – randombumper

+0

Это более полезно, чем вы думаете. Идентификатор 'y' доступен внутри самой функции (и только там), поэтому он может быть использован для какой-то рекурсии, например. Также полезно иметь 'function y' в трассировке стека вместо связки' (анонимная функция) '. Подробнее об этом можно узнать здесь http://kangax.github.io/nfe/ и здесь https: // medium.ком/@ cramforce/на-удивительности-оф-Fn-DISPLAYNAME-9511933a714a. – pomeh

-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> 

его только алфавитную проблема случая: USE "getPostFeed" вместо "GetPostFeed".

Либо у вас все в порядке.