嘿所有我有以下功能,我试图通过点击按钮来调用:
(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)); 但我不确定如何调用它,因为这不是我的代码
答案 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的方式:)