テーブルの行を表示/非表示にするためにjQueryのtoggle()を使用しています。 FireFoxでは正常に機能しますが、IE 8.では機能しません。
.show()
/.hide()
でも問題なく動作します。
slideToggle() はIEでも機能しません-1秒間表示された後、再び消えます。FireFoxでは正常に機能します。
私のHTMLはこれに似ています
<a id="readOnlyRowsToggle">Click</a>
<table>
<tr><td>row</td></tr>
<tr><td>row</td></tr>
<tr class="readOnlyRow"><td>row</td></tr>
<tr class="readOnlyRow"><td>row</td></tr>
<tr class="readOnlyRow"><td>row</td></tr>
</table>
JavaScript
$(document).ready(function() {
$(".readOnlyRow").hide();
$("#readOnlyRowsToggle").click(function() {
$(".readOnlyRow").toggle();
});
});
テーブルのtrで同じエラーが発生しました。 IE8のスクリプトデバッグツールを使用して調査を行いました。
最初にトグルを使ってみました:
$(classname).toggle();
これはFFでは機能しますが、IE8では機能しません。
次にこれを試しました:
if($(classname).is(":visible"))//IE8 always evaluates to true.
$(classname).hide();
else
$(classname).show();
このコードをデバッグしたとき、jqueryは常にそれが目に見えると思っていました。したがって、それは閉じますが、再び開くことはありません。
次に、これを次のように変更しました。
var elem = $(classname)[0];
if(elem.style.display == 'none')
$(classname).show();
else
{
$(classname).hide();
}
それはうまくいきました。 jQueryは バグ を持っているか、おそらく私のhtmlは少し厄介です。いずれにせよ、これは私の問題を修正しました。
JQuery 1.4にアップグレードすることでこれが修正されますが、私はそれに取り組んでいますが、このページで私のために機能した唯一の「修正」はDough boyの答えでした。
$(document).ready(function() {
$(".readOnlyRow").hide();
$("#readOnlyRowsToggle").click(function() {
$(".readOnlyRow").toggle($('.readOnlyRow').css('display') == 'none');
});
});
<tr class=".readOnlyRow"><td>row</td></tr>
からピリオドを削除してください。 jQueryクラスを選択するための構文は、ピリオドを前に付けることですが、HTMLコードでは不要です。
これはIE8では機能しないが、
$('.tableRowToToggle').toggle();
しかしこれはうまくいきます:
$('.tableRowToToggle').each(function(){this.toggle()});
前にここに投稿されたリンクjASTからアイデアを得ました
この問題は、TR要素の子を非表示にすることで修正しました。
toggleTr($(".toggletr"));
function toggleTr(el) {
$(el).children('td').each(function() {
$(this).toggle();
});
}
これはFF3.5/FF3/IE8/IE7/IE6/Chrome/Safariでは問題ないようです。
私自身これに遭遇しました-私が見つけた最も簡単な解決策は以下を確認することです:
:隠されていない)
の代わりに
:目に見える
その後、それに応じて行動します。 。
これはJQuery 1.4で修正されたようです。
テーブルはhtmlの興味深い部分であり、他の要素のように通常のルールに従っていません。
基本的にテーブルはテーブルとして表示されますが、テーブルには特別なルールがありますが、ブラウザ戦争である狂気のジェットコースターのため、これは古いブラウザでは適切に処理されませんでした。
基本的に古いブラウザでは、テーブルの表示プロパティは最小限であり、フローはほとんど文書化されていませんでした。そのため、table/tr/tdタグの事前定義値を変更する代わりに、次のクラスを追加および削除して、クラス自体のオンとオフを切り替えるのが最善です。 table/tr/tdの属性。
.tableHide {
display: none;
}
<table>
<tr><td> Visible content</td></tr>
<tr><td> Visible content</td> <td class="**tableHide**"> **Hidden Content**</td></tr>
</table>
これは、表示を切り替えるために使用される別のクラスであるため、テーブル自体は変更されず、テーブルのプロパティを変更する必要もないため、表示および関連するレイアウトプロパティは、たとえブラウザは、舞台裏でそれを簡単に行いません。
同じ問題がありましたが、toggle
/slideToggle
をすべてのブラウザーで機能させるための素晴らしい回避策を見つけました。
<a id="myButton">Click</a>
<div id="myDiv" display="none">lorem ipsum .... text ....</div>
そして今JS:
jQuery("#myButton").click(function () {
var currentDisplay = jQuery("#myDiv").css("display"); // save the current Display value
jQuery(#myDiv).slideToggle("fast", function () { // lets do a Nice slideToggle
// this code will run AFTER the sildeToggle is done
// so if slideToggle worked fine (in FF, chrome, ...) this will have no evect, since the value is already block or none
// but in case IE 8 runs this script, it will set the css display to the current value
if (currentDisplay == "none") {
jQuery(#myDiv).css('display', 'block');
}else {
jQuery(#myDiv).css('display', 'none');
}
});
return false;
});
その結果、slideToggle
はIE8を除くすべてのブラウザーで正常に動作しますが、IE8は奇妙な(めちゃくちゃなスライド)のように見えますが、引き続き動作します。
$(document).ready(function() {
$(".readOnlyRow").hide();
$("#readOnlyRowsToggle").click(function() {
$(".readOnlyRow").toggle($('.readOnlyRow').css('display') == 'none');
});
});
IE8がすべてをtrueと評価する原因となるjQueryバグがあります。上記をお試しください
Jquery mobileを含めた場合、トグルがiphoneで機能しない可能性があることに気づきました。 jqueryモバイルがロードされる前にトグル(.ready)を実行すると、問題ありません。