繁体   English   中英

jQuery 插件选项

[英]jQuery Plugin Options

首先,我知道这是一个基本的 JS 问题,而不是 jQuery。 我正处于那个学习点,我似乎无法完全解决一些范围问题。 所以我需要一些解释。

我一直在阅读我能找到的每篇文章/教程,但只需要一些答案。 我设置了这个基本代码来进行试验(因为实际代码太大而无法在此处发布)。

在下面的实验中,当单击 selector1-change 按钮时,“cmd”变量显示正确,但对 this.options 的引用是“undefined”,因为它是 MySelector() 的不同实例,除非我偏离了方向.

那么如何调用这样一个对象的实例呢?

例子:

您可以通过创建它来使用 jQueryUI 的对话框,然后您可以向它传递命令,如 $('#mydiv').dialog('close'); 这将访问附加到该元素的实例。 这是如何实现的?

JQUERY_MYSELECTOR.JS

(function($){
    $.fn.MySelector = function(incoming) {

        if (typeof(incoming) != 'object') {
            return runCommand(incoming);
        }

        var options = $.extend({},{
            id: false,
            backgroundColor: false
        },incoming);

        function runCommand(cmd) {
            alert('blah:'+this.options.backgroundColor+"\n"+'cmd:'+cmd);
        }
    }
})(jQuery);

脚本

<script type="text/javascript" src="jquery_myselector.js"></script>
<script type="text/javascript">
    $j(document).ready(function() {
        $j('#selector1).MySelector({ backgroundColor: '#000000' });
        $j('#selector1-change').click(function() {
            $j('#selector1').MySelector('mooocow');
        });
    });
</script>

风格

<input type="button" value="selector1" id="selector1" />
<br/>
<input type="button" value="selector1-change" id="selector1-change" />

更新忘记在 selector1 上使用插件(duh)

在为选项赋值之前调用 runCommand - options 在 runCommand 的主体内具有undefined的值。 不要问我 JS 是如何在你声明之前看到 runCommand 的主体的,但它可以。

此外,在 MySelector 的第一级, this绑定到运行$j('#selector1-change')的结果,这是一个数组。 您将需要迭代该数组。

尝试这样的事情:

(function ($) {
    function runCommand(e, cmd) {
        alert('blah:' + e.options.backgroundColor + "\n" + 'cmd:' + cmd);
    }

    $.fn.MySelector = function (incoming) {
        this.each(function () {
            if (typeof (incoming) != 'object') {
                return runCommand(this, incoming);
            } else {
                this.options = $.extend(this.options || {
                    id: false,
                    backgroundColor: false
                }, incoming);
            }
        });
    }
})(jQuery);

你可以尝试这样的事情:

(function($){
    $.myPlugin = {
        foo: function () {...},
        bar: function () {...},
        foobar: function () {...}
    };

    $.fn.MySelector = function (operation) {
        if (typeof operation === 'string') {
            switch(operation) {
                'open':
                    $.myPlugin.foo();
                    break;
                'destroy':
                    $.myPlugin.bar();
                    break;
                default:
                    $.myPlugin.foobar();
                    break;
            }
        }
    }
}(jQuery));

options是在您的主体范围内使用var语句声明的,您不需要在 runCommand 函数中使用this关键字,因为在该函数中您可以访问外部闭包:

    function runCommand(cmd) {
        alert('blah:'+options.backgroundColor+"\n"+'cmd:'+cmd);
    }

暂无
暂无

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

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