6

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

假设我们有一个警报:

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

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

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

我怎么能这样做,因为我的是自定义 JS 函数?这样它不起作用:

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

还是其他解决方案?

4

3 回答 3

8

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

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

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

这是一个工作示例


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

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

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

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

请注意,在方法内部,this引用一个 jQuery 实例,因此无需将其包装在对$.

于 2013-01-11T12:43:30.633 回答
5

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

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

$('div.myGroupOfItems').promise().done(function() {
    myAlert();
});
于 2013-01-11T12:46:15.043 回答
4

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

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

$('div.myGroupOfItems').toggle('fast').myAlert();
于 2013-01-11T12:44:18.743 回答