少し掘り下げた後、子要素が切り替えられなかった理由を理解しました。
jQueryのトグルのソース関数は次のとおりです。
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を返すことを意味しjQuery(this).is(":hidden")ます。次に、jQueryは実際に要素に「show」を適用します。
回避策:
1のパラメーターを渡すことにより、jQueryは代わりに1ミリ秒の期間でanimate関数を呼び出してトグルを実行します。
$(document).ready(function(){
$('#myb').click(function(){
$('.child').toggle(1);
});
});
ここで見られる:http: //jsfiddle.net/bMMhy/3/