jQuery 函数的全局命名空间问题

global namespace issue with jquery function

本文关键字:命名空间 问题 全局 函数 jQuery      更新时间:2023-09-26

在初始页面加载后,我在从全局名称空间调用jquery定义的函数时遇到问题。 根据我在下面的代码,页面最初加载正常,但是当我尝试调用我的onchange事件时,我收到以下异常:

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 函数调用。

知道为什么会这样吗?

谢谢-保罗

找到了 Matt 指出的问题。 jQuery区分大小写。谢谢马特

将函数定义为表达式时,参数紧跟 function 关键字。尝试更改

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

jQuery.getPostFeed = function(user_id, identifier) {

我遇到了你的问题:

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

它只是一个按字母顺序排列的问题:使用"getPostFeed"而不是"GetPostFeed"。

要么你没事。

如果全局使用命名空间,则必须始终使用相同的命名空间。

前任。如果您使用$,则在所有地方都应使用相同的函数$而不是使用关键字 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");
  }
}($));