简体   繁体   English

将我的头缠在jQuery插件上

[英]Wrap my head around jQuery Plugins

I'm attempting my first jQuery plugin. 我正在尝试我的第一个jQuery插件。

(YAY... about time!) (是的...关于时间!)

I am having a hard time wrapping my head around how I can get a publicly accessible function to fire properly. 我很难全神贯注于如何使公众可以使用的功能正常启动。

Code

(function($, doc, win){
    "use strict";

    // Our main function
    $.fn.ajaxian = function(options){
        // Our Settings
        var $setts = $.extend({
                CallBack:         null,
                LoadInto:         'body',
                LoadSection:       null,
                LoadingContent: null,
                LoadInEffect:     'fade'
            }, options);

        console.log('Plugin Initialized');

        var elements = this;

        return {
            ManualLoad: function(){
                console.log('Manual Fired');
            },
            elements: function(){
                $(this).on('click', function(e){
                    e.preventDefault();
                    return $.fn.ajaxian.LoadPage;
                }); 
            }
        };  

    };

    // Load in a page
    $.fn.ajaxian.LoadPage = function(){
        console.log('Internal Page Load Initialized');  
    };

}(jQuery, document, window));

UPDATED CODE 更新的代码

(function($, doc, win){
    "use strict";

    // Our main function
    $.fn.ajaxian = function(options){
        // Our Settings
        var $setts = $.extend({
                CallBack:         null,
                LoadInto:         'body',
                LoadSection:       null,
                LoadingContent: null,
                LoadInEffect:     'fade'
            }, options);

        console.log('Plugin Initialized');

        return this.each(function(){
            var $this = $(this);
            $this.on('click', function(e){
                e.preventDefault();
                $.fn.ajaxian.LoadPage();
            });
        });

    };

    // Load in a page
    $.fn.ajaxian.LoadPage = function(){
        console.log('Internal Page Load Initialized');  
    };

    // Manual load in a page
    $.fn.ManualLoad = function(){
        console.log('Manual Page Load Initialized');
        $.fn.ajaxian.LoadPage();
    };

}(jQuery, document, window));

Usage 用法

jQuery(window).on('load', function(){
    // Initialize everything
    Initialize(jQuery);
});

var Initialize = function($){
    var options = {
        CallBack:         function(){console.log('Callback Fired')},
        LoadInto:         '#container',
        LoadSection:       '#content',
        LoaderContent:   null,
        LoadInEffect:     'fade'
    };
    $('a:not(.external), button:not(.external), .internal').ajaxian(options);

    $('body').ajaxian(options).ManualLoad();

    if(location.pathname == '/'){
        $('body').ajaxian('init', options);
    }
};

Now, while I am getting the Plugin Initialized in my firebug console, I am getting an error attempting the ManualLoad . 现在,当我在Firebug控制台中获取Plugin Initialized时,尝试ManualLoad时出现错误。

It states: TypeError: $(...).ajaxian(...) is undefined 它指出: TypeError: $(...).ajaxian(...) is undefined

What am I doing wrong? 我究竟做错了什么?

Your ajaxian method should return an object that has ManualLoad as a function: 您的ajaxian方法应返回一个具有ManualLoad功能的对象:

$.fn.ajaxian = function() {
    // Our Settings
    var elements = this;
    var $setts = $.extend({}, $.fn.ajaxian.defaults, options);
    console.log('Plugin Initialized');

    elements.on('click', function(e){
        var $clickedElement = $(this);
        e.preventDefault();
        // do something with clicked element here
    }); 

    return {
         ManualLoad: function(){
             console.log('Manual Fired');
             // use elements here
         }
    }
};

Your ajaxian function is not returning any value! 您的ajaxian函数未返回任何值!

    $.fn.ajaxian = function(options){
        // Our Settings
        var $setts = $.extend({}, $.fn.ajaxian.defaults, options);
        console.log('Plugin Initialized');
        //should return some value.
    };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM