Jquery中的功能没有被看到

时间:2015-01-29 16:56:13

标签: jquery function dom typeerror referenceerror

嘿所有我有以下功能,我试图通过点击按钮来调用:

(function ($) {
  $(window).load(function() { 
     $("#status").fadeOut();
     $("#preloader").delay(400).fadeOut("slow");
     [Lots of code here]
  });

  $(document).ready(function() {
     [Lots of code here]
  });

  [Lots of code here]

  function testing() {
     $("#status").fadeIn();
     $("#preloader").delay(400).fadeIn("slow");
  }

  [Lots of code here]
}(jQuery));

我得到的错误是:

未捕获的ReferenceError:未定义测试

我使用的按钮的HTML是:

<button value="TEST" onClick="testing();">test</button>

当我尝试将(function($){}(jQuery))的 testing()代码放在之外时; 它不会在 $(“#status”)中找不到 status preloader 的值,其中包含以下错误.fadeIn(); 行:

未捕获的TypeError:undefined不是函数

我知道问题出在(function($){}(jQuery)); 但我不确定如何调用它,因为这不是我的代码

2 个答案:

答案 0 :(得分:1)

这是因为testing在jQuery范围内。您的代码应如下所示:

function testing() {
   jQuery("#status").fadeIn();
   jQuery("#preloader").delay(400).fadeIn("slow");
}
(function ($) {

答案 1 :(得分:0)

<button value="TEST" onClick="testing();">test</button>

此代码通常在全局范围内查找testing()<script>标记内的任何内容,但不在任何函数/对象内。

你的代码的问题在于你的立即调用函数表达式(IIFE)实际上定义了一个testing()函数,但是无法从外部访问它,它只是该IIFE中的局部变量。要使它可用,可以返回包含此函数的对象,如此

        var myApp = (function ($) {
              $(window).load(function() { 

              });

              $(document).ready(function() {

              });

              // returning the object to call from outide   
              return { 
                testing : function () {
                  alert('sdfdfd');
                  $("#status").fadeIn();
                  $("#preloader").delay(400).fadeIn("slow");
                }
              }


            }(jQuery));

你可以通过按钮这样调用它。

<button value="TEST" onClick="myApp.testing();">test</button>

执行此操作,您不会使用所有函数污染全局命名空间,您可以在返回的对象中定义所有函数以从外部调用它们。这就是大多数库使用单个全局对象公开其API的方式:)