调用jQuery插件选项中指定的函数

时间:2011-07-29 10:53:59

标签: jquery jquery-plugins

我制作了一个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 - 但我不确定。

非常感谢。

2 个答案:

答案 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

} ) ;