重新分配自己的Javascript函数

时间:2011-05-19 14:27:05

标签: javascript jquery

如何在页面加载时保持accordions不被初始化...我希望它只能从方法内部运行(当然不是init())但是只在需要

$.extend($.fn, {
        accordion: function () {
            var accordion = (function () {
                var accordions = (function () {
                    alert('test');
                    return 1;
                })();

                return {
                    init: function (el) {
                        el.click(function (e) {
                            accordion.show(el);
                        });
                    },
                    show: function (el) {
                        console.log(accordions);
                    }
                }
            })();

            this.each(function() {
                accordion.init($(this));
            });
        }
    });

我希望我提供了足够的细节: - \

1 个答案:

答案 0 :(得分:0)

$.extend($.fn, {
    accordion: function () {
        var accordion = (function () {
            var accordions = (function () {
                alert('test');
                return 1;
            })();

            return {
                init: function (el) {
                    el.click(function (e) {
                        accordion.show(el);
                    });
                },
                show: function (el) {
                    console.log(accordions);
                }
            }
        })();
    }
});
function theFunctionYouWanted(){
    $('selector').each(function(el) {
        var $el = $(el);
        $el.accordion().init($el);
    });
}

使用.extend扩展jQuery以包含.accordion方法。此方法返回一个具有init方法的对象,因此通过调用$ object.accordion()可以获得对accordion对象的引用,然后可以调用它的init方法将元素传递给它。

$el.accordion().init($el)

如果你想看看这是如何做到的,你应该看看任何伟大的jquery ui插件。如果您正在尝试创建类似的插件样式,那么jquery小部件工厂为创建可重用的UI小部件提供了一个很好的起点。有关小部件工厂的更多信息,请参阅http://blog.nemikor.com/2010/05/15/building-stateful-jquery-plugins/