链.ready和.resize成功能?

时间:2011-09-10 15:54:29

标签: javascript jquery oop object triggers

在这个对象中,我有一个属性Response.action,它是一个同时在jQuery的.ready.resize上触发代码的简写。下面的代码块中的注释演示了它的用法。 Response.action适用于.ready,但不适用于.resize。任何人都可以看到为什么和/或建议如何使它适用于两者?

window.Response = (function($, window, undefined) {

    var Response = {},  // object
        $window = $(window),
        $document = $(document); // cache selectors 

    /*
    Response.action()
    This triggers code on .ready *and* .resize 
    usage:
                Response.action( myactions );
                function myactions() { 
                    // do stuff
                }       
    */  
    action = function( code ) { 

        var code = ( code !== undefined ) ? wrap() : false; // apply wrap() if we have code

        function wrap() {
            $document.ready(function() {
                $window.resize(function() {
                    code // input
                }).resize(); // trigger resize handlers
            }); // close .ready function
        }

        return code; // wrapped code fires on .ready and .resize
    },
    Response.action = action;

    return Response; // return object

})(jQuery, window); // expose to global object

这是针对responsejs.com的 - 完整的lib(正在进行中)就在那里。

我正在使用其他属性之一来测试它。 .band属性本身就是可靠的:

Response.action( myactions() );
function myactions() { 
        if ( Response.band(600) ) { $('header').html('600px or wider'); }
        else { $('header').html('below 600px');  }
}

更新:这有效:

Response.action = function(func){     if(typeof func!=='function'){return false; }

$(function () {
    func();
    $window.resize( func );
}).resize();

return func;

};

使用此用法语法:

Response.action( myactions );
function myactions() { 
        // do stuff
}

*请注意,在通话中,它必须是myactions而不是myactions()

1 个答案:

答案 0 :(得分:2)

怎么样

window.Response = (function ( $, window, undefined ) {

    var Response = {};

    Response.action = function ( func ) {
        if ( typeof func !== 'function' ) { return false; }

        $(function () {
            func();
            $( window ).resize( func );
        });

        return func;
    };

    return Response;

})( jQuery , window );