我需要在切换所有项目后调用自定义函数。不适合每个人。
假设我们有警报:
function myAlert() { alert("OK"); }
如果我这样编码,则每次切换时都会调用:
$('div.myGroupOfItems').toggle('fast',function() {
myAlert();
});
我怎么能这样做,因为我的自定义JS功能?这样它就不起作用了:
$('div.myGroupOfItems').toggle('fast').myAlert();
或其他解决方案?
答案 0 :(得分: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实例,因此无需将其包含在对$
的不必要的调用中。
答案 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();