【问题标题】:jQuery - Checking if function is definedjQuery - 检查函数是否已定义
【发布时间】:2013-12-21 03:12:55
【问题描述】:

我这辈子都不知道该怎么做。我的 jquery 名称以某种方式隔开,因为它以 NWO.{function-name} 为前缀,以使其更有条理。所以它看起来像这样:

var NWO = NWO || {}

NWO.Chat = (function() {
   return{
   init : function($objects) {
   console.log('do something');         
   } }
}
}());

jQuery(document).ready(function(){
  NWO.Chat.init($('div').find('a.chat'));
});

现在聊天元素不是​​在每个页面上,所以在某些不存在聊天链接的页面上,我得到一个 NWO.Chat 未定义。我认为那些不存在的页面有聊天链接我可以做这样的事情来避免错误。

if(jQuery().NWO.Chat){ NWO.Chat.init($('div').find('a.chat')); }

if($.fn.NWO.Chat){ NWO.Chat.init($('div').find('a.chat')); }

但似乎都没有工作我仍然得到错误。当聊天链接不在页面上时,如何避免 js 错误。我已经敲了好几个小时头了。提前致谢。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    NWO 不是 jQuery 插件,所以与 jQuery 无关,它是一个对象(看起来像一个全局范围),所以你可以这样做

    if (NWO && NWO.Chat && typeof NWO.Chat.init == 'function') {
        NWO.Chat.init($('div').find('a.chat'));
    }
    

    【讨论】:

    • 它将是undefined,而不是
    • @danronmoon 什么是未定义的
    • 工作就像一个魅力!非常感谢@ArunPJohny 的帮助
    【解决方案2】:

    您可以使用 typeof 来检查对象是否已定义,通过将其与“未定义”进行比较

    if(typeof NWO.Chat != 'undefined')
    

    【讨论】:

      【解决方案3】:

      您也可以只解决问题的根源:

      NWO.Chat = (function() {
         return{
         init : function($objects) {
         console.log('do something');         
         } }
      }      //  <<-----------REMOVE THIS CURLY BRACE
      }());
      

      最后的额外卷曲 (}) 是问题所在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        相关资源
        最近更新 更多