我制作了一个jQuery插件。现在我想在jQuery插件的选项中分配一个jQuery动画(带回调):
(function($){
$.fn.jPl = function(options) {
var $e = $(this);
var defaults = {
showEffect: jQuery.noop,
hideEffect: jQuery.noop,
};
var options = $.extend(defaults, options);
var onSuccess = function ( ) {
$e.options.hideEffect ( function () {
render(function () {
$e.options.showEffect ( function ( ) {
if ( waitTime < options.minWait ) waitTime = options.minWait;
setTimeout ( function ( ) { refreshWall ( ) } , waitTime * 1000 );
waitTime = 0;
});
})
});
}
}})(JQuery);
呼叫:
$( "#obj" ).jPl ( {
showEffect: $.fn.showEffect,
hideEffect: $.fn.clearEffect,
} ) ;
现在我收到了这个错误:
未捕获的ReferenceError:未定义showEffect
showEffect已定义,当我在插件中调用它时,它工作正常。
================= 的修改 showEffect和clearEffect在其他JS文件中定义:
(function($) {
$.fn.clearEffect = function( callback ) {
return this.each(function() {
$(this).hide ( function ( ) {
if (typeof callback == 'function') { // make sure the callback is a function
callback.call(this); // brings the scope to the callback
}
});
});
}
$.fn.showEffect = function( callback ) {
return this.each(function() {
$(this).show ( function ( ) {
if (typeof callback == 'function') { // make sure the callback is a function
callback.call(this); // brings the scope to the callback
}
});
});
}
})(jQuery);
我认为,调用这样的函数是一个错误:$ e.options.showEffect - 但我不确定。
非常感谢。
答案 0 :(得分:0)
根据给出的代码,您的showEffect
函数存在于插件的范围内,但不在插件范围之外。
除非您在用于创建插件的匿名函数之外声明了另一个名为showEffect
的函数,否则您将收到错误。
答案 1 :(得分:0)
您的示例可能不完整,因为我发现很难相信某些代码确实有效。
$e.options.showEffect
不起作用,因为选项是局部变量;你需要声明this.options而不是var options;
var defaults = {
showEffect: function,
hideEffect: function,
};
函数应替换为jQuery空函数jQuery.noop,因为您的版本可能无法在所有浏览器中使用
但是,如果第一个错误你得到它的Uncaught ReferenceError:showEffect没有定义,那么我认为showEffect它没有在你调用插件的同一范围内定义,如 此代码会抛出其他错误,但不会抛出您所拥有的错误:
function showEffect() {
}
function clearEffect() {
}
$("#obj").jPl ( {
showEffect: showEffect,
hideEffect: clearEffect
} ) ;