如何为我的插件覆盖jQuery全局函数?

时间:2011-02-18 10:25:17

标签: javascript jquery plugins override

我创建了一个基于隐藏字段创建复选框图像的插件。我想覆盖is()函数......可能吗?我基本上使用图像来模拟复选框。

HTML:

<input type="hidden" value="1" id="box" />

为隐藏字段创建插件:

$('#box').myCheckbox();

我希望能够做到以下几点:

$('#box').is(':checked');

是否可以覆盖插件中的is()功能?

3 个答案:

答案 0 :(得分:3)

您可以扩展jQuery的选择器并添加新的选择器。

http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/

例如:

$.extend($.expr[':'],{
    inline: function(a) {
        return $(a).css('display') === 'inline';
    }
});

允许你这样做:

$(':inline'); // Selects ALL inline elements

$('a:inline'); // Selects ALL inline anchors

编辑:

在你的情况下,要模拟复选框,首先从jquery中获取代码:checked ...这是:

return elem.checked === true;

然后

$.extend($.expr[':'],{
    checked: function(a) {
        if(a.isMySpecialCheckbox()) return a.hasAPropertyThatSignifiesChecked;
        else return elem.checked === true;
    }
});

尝试一下,我没试过,但它应该有用。

答案 1 :(得分:2)

是的:)

           (function() {
              var proxied = jQuery.fn.is;
              jQuery.fn.is= function() {
                //do your things here
                return proxied.apply(this, arguments);//call the default is here
              };
            })();

btw :checked默认情况下已受支持

所以,如果你有

$('#checkbox')。is(':checked'); //返回true / false,具体取决于是否选中了复选框,不要使事情变得复杂,因为你将在以后拉出你的头发忘了你做了这个压倒一切的变化:)

答案 2 :(得分:1)

为什么不能使用.attr('checked')