0

我正在使用 jquery 1.9.1,并且正在尝试开发一个插件。问题是插件不起作用。这是代码:

    ;(function($) {

    $.fn.single = function() {

        return this.each(function(){

            // Get the instance
            var element = $(this);

            // Resize the "data-target" divs
            element.load(function(){
                changeCSS(element);
            });

            // Bind the method to the resize window event
            $(window).bind("resize", function(){  
                changeCSS(element);  
            });

        });

    };

    // function to resize all the "data-target" divs
    function changeCSS(element) {

        // Grab the screen resolution
        var windowWidth     = $(window).width();
        var windowHeight    = $(window).height();
        // Count how many targets the div has
        var targetsSize     = $("[data-target]").size();

        // Resize the parent div
        $(element).css({
            "width" : windowWidth,
            "height": windowHeight * targetsSize
        });

        // Resize all the targets div
        $(element + "> div[data-target]").each(function(){
            $(this).css({
                "width" : windowWidth,
                "height": windowHeight
            });
        });

    }

})(jQuery);

我在文件上这样称呼它:

<script src="js/jquery-1.9.1.min.js"></script>
    <script src="js/single-0.1.0.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $("#single").single();
        });
    </script>

控制台没有问题。我做错了什么?

4

3 回答 3

2

我假设这是因为您滥用了.load方法。如果您查看 jQuery 文档,它适用于:

.load() :从服务器加载数据并将返回的 HTML 放入匹配的元素中。

http://api.jquery.com/load/

删除这些行element.load(function ...,只需调用你的 changeCSS 函数,你已经在 Document.Ready 上加载了这个扩展

    return this.each(function () {
        // ...

        changeCSS(element); // <-- just run the function right away

        // ... etc
    });
于 2013-03-25T18:07:26.840 回答
0

通常,在声明函数之前调用它是不好的做法。为了让你的插件正确,你最好从一开始就正确地构建它。除此之外,正如@mcpDESIGNS 指出的那样,您错误地使用了.load方法。此外,如果您在此处解释您要与之共谋的具体内容,这将很有用。

要开始制作 jQuery 插件,请尝试查看此处的 jQuery 文档,或者您可以查看教程。

这是首选结构:

(function($) {

  // Declare your methods at the beginning of your plugin
  var yourMethods = {
    'methodOne' : function() {

    },
    'methodTwo' : function() {

    }
  };

  $.fn.pluginName = function() {

    return this.each(function() {

    });

  }
}(jQuery));
于 2013-03-25T18:37:13.660 回答
0

代替:

element.load(function(){
    changeCSS(element);
});

我做了:

changeCSS(element);

并且...而不是:

$(element + "> div[data-target]")

我做了:

$(element).children('div[data-target]')

现在插件正在执行,没有错误或错误。多谢你们!

于 2013-03-26T14:13:30.893 回答