经过一番挖掘,我弄清楚了为什么子元素没有被切换:
jQuery的toggle的源函数如下:
function (fn, fn2, callback) {
var bool = typeof fn === "boolean";
if (jQuery.isFunction(fn) && jQuery.isFunction(fn2)) {
this._toggle.apply(this, arguments);
} else if (fn == null || bool) {
this.each(function () {
var state = bool ? fn : jQuery(this).is(":hidden");
jQuery(this)[state ? "show" : "hide"]();
});
} else {
this.animate(genFx("toggle", 3), fn, fn2, callback);
}
return this;
}
如果没有参数传递给函数,则执行以下内容:
var state = bool ? fn : jQuery(this).is(":hidden");
jQuery(this)[state ? "show" : "hide"]();
首先隐藏包含元素,然后检查子元素......这意味着子元素将返回 true on jQuery(this).is(":hidden")
。反过来,jQuery 实际上会将“显示”应用于元素。
解决方法:
通过传递 1 的参数,jQuery 将改为调用持续时间为 1 毫秒的 animate 函数来执行切换。
$(document).ready(function(){
$('#myb').click(function(){
$('.child').toggle(1);
});
});
在这里看到:http: //jsfiddle.net/bMMhy/3/