您已经知道自己处于什么状态(最大化/最小化),因为该特定状态的代码正在执行。因此,您可以简单地将这些信息another_function
作为参数传递给:
$('button').toggle(function() {
// case 1: maximize
// ...
another_function($(this), 'maximize');
}, function() {
// case 2: minimize
// ...
another_function($(this), 'minimize');
});
更新:Groveling jQuery 的内部状态
jQuery 当前(1.7.2)在机制中使用了一个私有后门.data()
来存储其切换的状态。这个后门在 jQuery 源代码中被明确标记为不止一个私有,不用说,后面的任何部分都可能在没有任何通知的情况下发生更改。因此我强烈建议不要走这条路。
也就是说,这就是发生的事情:
jQuery 使用通过访问的私有数据空间$._data()
来存储切换的当前点击次数。此点击计数模 2 用于决定执行哪个函数,并在每次点击时递增。
当前用于存储此数据的键是 string "lastToggle" + guid
,其中guid
通常也是由 jQuery 自动生成的值(使用全局递增计数器)。的值guid
在切换处理函数上设置,您可以在设置切换后检索它,如下所示:
var f1 = function() {
// case 1: maximize
// ...
another_function($(this), 'maximize');
}, f2 = function() {
// case 2: minimize
// ...
another_function($(this), 'minimize');
};
$('button').toggle(f1, f2);
// guid is now available on both handlers:
console.log(f1.guid, f2.guid);
您还可以guid
通过在调用之前将其设置在第一个处理程序上来修复 的值toggle
:
var f1 = function() {
// case 1: maximize
// ...
another_function($(this), 'maximize');
}, f2 = function() {
// case 2: minimize
// ...
another_function($(this), 'minimize');
};
f1.guid = "foo";
$('button').toggle(f1, f2);
// guid is now fixed to "foo" and available on both handlers:
console.log(f1.guid, f2.guid);
给定这个句柄,您可以检索到目前为止的点击次数(从而预测下一个将调用哪个处理程序)
$._data($('button'), "lastToggle" + guid);