jQuery has two methods called .toggle()
. The other one [docs] http://api.jquery.com/toggle-event/ does exactly what you want for click events.
Note:看来至少从那时起jQuery 1.7,这个版本的.toggle
is 已弃用,可能正是因为这个原因,即存在两个版本。使用.toggle
更改元素的可见性只是更常见的用法。方法是在 jQuery 1.9 中删除.
下面是一个示例,说明如何实现与插件相同的功能(但可能会暴露与内置版本相同的问题(请参阅文档中的最后一段))。
(function($) {
$.fn.clickToggle = function(func1, func2) {
var funcs = [func1, func2];
this.data('toggleclicked', 0);
this.click(function() {
var data = $(this).data();
var tc = data.toggleclicked;
$.proxy(funcs[tc], this)();
data.toggleclicked = (tc + 1) % 2;
});
return this;
};
}(jQuery));
DEMO http://jsfiddle.net/npwAz/1/
(免责声明:我并不是说这是最好的实现!我打赌它可以在性能方面得到改进)
然后用以下命令调用它:
$('#test').clickToggle(function() {
$(this).animate({
width: "260px"
}, 1500);
},
function() {
$(this).animate({
width: "30px"
}, 1500);
});
更新2:
与此同时,我为此创建了一个合适的插件。它接受任意数量的函数,并且可用于任何事件。可以在 GitHub 上找到 https://github.com/fkling/jQuery-Function-Toggle-Plugin.