1

まず、私はあなたの典型的なデバッグツールのいくつかが使用できないように書かれたアプリに取り組んでいます(または少なくとも私はその方法を理解できません:)。

JavaScript、htmlなどはすべて「調理」されてエンコードされてから(プロセスがどのように機能するかについて少し曖昧だと思います)、VS 2005をieにアタッチできず、firebugliteが機能しません良い。また、インターフェイスはフレーム内にあるため(yuck)、他のいくつかのツールも同様に機能しません。

FirebugはFirefoxでうまく機能しますが、Firefoxではこの問題は発生していません(Safariでも発生していません)。そのため、コードがIEで再生される方法に「明らかに」問題があることに気付く人がいるかもしれません。その奇抜さについて与えることができるより多くの情報がありますが、これから始めましょう。

基本的に、通常のテーブル行を表示しないようにすることで、テーブルをヘッダーに「折りたたむ」機能があります。私は"onclick='toggleDisplay("theTableElement", "theCollapseImageElement")'"タグ<tr>にあり、テーブルは「class='closed'」で始まります。

FFとSafariでは、シングルクリックでテーブルが折りたたまれて展開されますが、IEテーブルを展開するには、複数回のクリック(1〜5の任意の数)が必要です。最初に「開いた」後、テーブルはしばらくの間1回のクリックで拡大および縮小し、最終的には複数回のクリックが必要になる場合があります。Visual Studioでほとんど見えないことから、毎回実際に関数に到達していることがわかります。アドバイスをよろしくお願いします!

JSコードは次のとおりです。

bURL_RM_RID="some image prefix";
CLOSED_TBL="closed";
OPEN_TBL="open";
CLOSED_IMG= bURL_RM_RID+'166';
OPENED_IMG= bURL_RM_RID+'167';

//collapses/expands tbl (a table) and swaps out the image tblimg
function toggleDisplay(tbl, tblimg) {
    var rowVisible;
    var tblclass = tbl.getAttribute("class");
    var tblRows = tbl.rows;
    var img = tblimg;

    //Are we expanding or collapsing the table?
    if (tblclass == CLOSED_TBL) rowVisible = false;
    else rowVisible = true;

    for (i = 0; i < tblRows.length; i++) {
        if (tblRows[i].className != "headerRow") {
            tblRows[i].style.display = (rowVisible) ? "none" : "";
        }
    }

    //set the collapse images to the correct state and swap the class name
    rowVisible = !rowVisible;
    if (rowVisible) {
        img.setAttribute("src", CLOSED_IMG);
        tbl.setAttribute("class",OPEN_TBL);     
    }
    else {
        img.setAttribute("src", OPENED_IMG);
        tbl.setAttribute("class",CLOSED_TBL);
    }
}

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

4

6 に答える 6

3

この行を変更してみましたか

tblRows[i].style.display = (rowVisible) ? "none" : "";

のようなものに

tblRows[i].style.display = (rowVisible) ? "none" : "table-row";

また

tblRows[i].style.display = (rowVisible) ? "none" : "auto";
于 2008-09-19T14:32:12.713 に答える
2

setAttribute は IE では信頼できません。属性アクセスとオブジェクト プロパティ アクセスは同じものとして扱われるため、'class' 属性の DOM プロパティは 'className' と呼ばれるため、IE では代わりにそれを使用する必要があります。

このバグは新しい IE8 ベータ版で修正されていますが、DOM Level 1 HTML プロパティを直接使用する方が簡単です。

img.src= CLOSED_IMAGE;
tbl.className= OPEN_TBL;

スタイルシートでテーブルの折り畳みを行うこともできます。これはより高速であり、スクリプトでテーブルの行をループする手間を省きます。

table.closed tr { display: none; }
于 2008-09-19T15:01:20.927 に答える
0

私はいつもstyle.display="block"とstyle.display="none"を使用します

于 2008-09-19T15:50:04.133 に答える
0

IE でスクリプトのデバッグを有効にして ([ツール] -> [インターネット オプション] -> [詳細設定])、「デバッガー」を配置した場合。ステートメントをコードに追加すると、IE はデバッガー ステートメントにヒットすると、Visual Studio を自動的に起動します。

于 2008-09-19T14:42:40.287 に答える
0

IEでこれに問題がありました。私の記憶が正しければ、「表示」スタイルの初期値を、最初に生成された HTML に直接配置する必要がありました。例えば:

<table>
  <tr style="display:none"> ... </tr>
  <tr style="display:"> ... </tr>
</table>

次に、JavaScript を使用してスタイルを変更することができます。

于 2008-09-19T14:50:13.263 に答える
0

<tr>個々のタグではなく、実際のタグに onclick 呼び出しを配置することをお勧めし<th>ます。これにより、HTML 内の JS が少なくなり、保守が容易になります。

于 2008-09-19T14:36:20.317 に答える