【问题标题】:Jquery Plugins, calling functions from other methodsJquery Plugins,从其他方法调用函数
【发布时间】:2011-08-18 23:41:19
【问题描述】:

就像这里的许多其他类似问题一样,我正在编写我的第一个 jQuery 插件。 它旨在采用一个选择元素并将选项替换为可单击的列表元素,以用作样本。 我的主要功能运行良好,但我需要添加调用另一个方法的能力,这将禁用某些选项。 我的问题是这样做时,我需要绑定一些点击元素并取消绑定其他元素。

目前我的原始绑定包含在我的“init”方法中的一个函数中。我需要能够从另一个“禁用”方法调用该函数。 所以这里有一些代码:

(function($){

var methods = {

    // Init method
        init    : function(options) {
            // Set options
            var
                defaults = {
                        clickCallback:  function(){} // Define empty function for click callback
                  }
            ,   settings = $.extend({}, defaults, options)


            // Function to bind options
            function fnBindOptions(var1, var2, var3) {
                // Stuff to bind elements

                    // Hit the click callback
                    settings.clickCallback.call(this); 

            }   

            return this.each(function() {

                // Check that we're dealing with a select element
                if(element.is('select')) {

                    // Loop through the select options and create list items for them
                    $('option', element).each(function() {

                        // Stuff to create list elements

                        // Bind click handler to the new list elements
                        fnBindOptions(var1, va2, var3);
                    });

                }

            });

            // return 
            return this();              
        }


    // Disable buttons method
    ,   disable : function(options) {

            // I need to access fnBindOptions from here
            $(elementID).children('li').removeClass('disabled').each(function(){
                fnBindOptions(var1, var2, var3);
            });

        }
};

这是我的问题:我需要在禁用每个选项之前调用它的绑定函数 - 但我无法从 disable 方法中访问 fnBindOptions - 因为 fnBindOptions 包含来自“设置”变量的回调,所以我可以“也不要将它移到“init”方法之外。

那么,这里有人有什么建议吗?

谢谢!

【问题讨论】:

    标签: javascript jquery jquery-plugins methods


    【解决方案1】:

    解决此问题的一种方法是将defaultssettingsbindOptions 函数放入methods 对象(或更广泛范围内的另一个对象)并相应地引用它们:

    var methods = {
        defaults: {
            clickCallback: function() {}
        },
        settings: {},
    
        bindOptions: function(var1, var2, var3) {
            // Stuff to bind elements
            // Hit the click callback
            methods.settings.clickCallback.call(this);
        },
    
        // Init method
        init: function(options) {
            methods.settings = $.extend({}, methods.defaults, options);
    
            return this.each(function() {
                if (element.is('select')) {
                    $('option', element).each(function() {
                        // Stuff to create list elements
                        // Bind click handler to the new list elements
                        methods.bindOptions(var1, va2, var3);
                    });
                }
            });
        },
    
        // Disable buttons method
        disable: function(options) {
            $(elementID).children('li')
                        .removeClass('disabled')
                        .each(function() {
                methods.bindOptions(var1, var2, var3);
            });
        }
    };
    

    【讨论】:

    • 我收到警告说“方法”可能尚未初始化,这是否通过了 JSLint?
    • @EranMedan:使用 jsHint,jsLint 限制太多了。
    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多