jQuery连接自定义函数

时间:2013-01-11 12:40:50

标签: jquery

我需要在切换所有项目后调用自定义函数。不适合每个人。

假设我们有警报:

function myAlert() { alert("OK"); }

如果我这样编码,则每次切换时都会调用:

$('div.myGroupOfItems').toggle('fast',function() {
myAlert();
});

我怎么能这样做,因为我的自定义JS功能?这样它就不起作用了:

$('div.myGroupOfItems').toggle('fast').myAlert();

或其他解决方案?

3 个答案:

答案 0 :(得分:8)

您必须扩展jQuery才能将方法添加到其中。你可以这样做:

$.fn.myAlert = function () {
    alert("OK");
};

如果您希望能够在此之后链接其他jQuery方法,则需要从插件返回this

这是working example


如果您对更多细节的实际内容感兴趣,请继续阅读。 $.fn只是$.prototype的别名。通过向prototype添加属性,您可以有效地扩展所有jQuery实例。

当您致电$时,jQuery会在内部创建一个实例(您无需手动创建实例,例如使用new运算符)。由于您已扩展$.prototype,因此所有实例现在都可以访问您的新方法。

如果您完全按照我上面显示的那样使用代码(没有return语句),您将无法链接对jQuery方法的进一步调用。通过从方法返回实例,调用将是可链接的:

$.fn.myAlert = function () {
    alert("OK");
    return this;
};

请注意,在方法内部,this引用了一个jQuery实例,因此无需将其包含在对$的不必要的调用中。

答案 1 :(得分:5)

你可以从jQuery 1.6开始使用它......

$('div.myGroupOfItems').toggle('fast');

$('div.myGroupOfItems').promise().done(function() {
    myAlert();
});

答案 2 :(得分:4)

要使用该语法,您需要将您的函数变成这样的jQuery插件:

$.fn.extend({         
    myAlert: function() {
        alert('OK');
        return this; // return the assigned elements to continue chaining.
    }
});

$('div.myGroupOfItems').toggle('fast').myAlert();