Frage

Zunächst einmal, ich arbeite an einer Anwendung, die so geschrieben ist, dass einige Ihrer typischen Debugging-Tools können nicht (oder zumindest verwendet werden, kann ich nicht herausfinden, wie :).

JavaScript, HTML, etc sind alle „gekocht“ und codiert (ich glaube, ich bin ein wenig unscharf, wie der Prozess funktioniert), bevor eingesetzt werden, so kann ich nicht anhängen VS 2005, dh, und Firebug lite doesn ‚t gut funktionieren. Auch die Schnittstelle ist in Rahmen (igitt), so dass einige andere Werkzeuge nicht so gut funktionieren.

Firebug funktioniert gut in Firefox, die nicht dieses Problem hat (noch ist Safari), so dass ich bin der Hoffnung, jemand könnte etwas „offensichtlich“ falsch mit der Art und Weise meinen Code mit IE spielen beschmutzen. Es gibt mehr Informationen, die über seine Schrulligkeit gegeben werden können, aber sie mit diesem beginnen.

Grundsätzlich habe ich eine Funktion, dass „kollabiert“ Tabellen in ihre Header durch normale Tabelle machen Zeilen nicht sichtbar. Ich habe in der "onclick='toggleDisplay("theTableElement", "theCollapseImageElement")'" Tags <tr> und Tabellen beginnen mit „class =‚geschlossen‘“.

Single Klicks Zusammenbruch und erweitern Tabellen in FF & Safari, aber IE Tabellen erfordern mehrere Klicks (eine scheinbar willkürliche Zahl zwischen 1 und 5) zu erweitern. Manchmal nach anfänglichem „geöffnet“ zu werden, werden die Tabellen erweitern und mit einem einzigen Klick für eine kleine Weile zusammenbrechen, nur schließlich zu erfordern mehr Klicks zurückzukehren. Ich kann aus sagen, was wenig ich in Visual Studio sehen, dass die Funktion tatsächlich jedes Mal erreicht wird. Vielen Dank im Voraus für jede Beratung!

Hier ist der JS-Code:

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);
    }
}

War es hilfreich?

Lösung

setAttribute ist unzuverlässig im Internet Explorer. Es behandelt Attribut Zugriff und Objekteigenschaft Zugang als die gleiche Sache, so, weil die DOM-Eigenschaft für das Attribut ‚Klasse‘ ist ‚classname‘ genannt, würden Sie, dass statt auf IE verwenden.

Dieser Fehler wird in der neuen IE8 Beta behoben, aber es ist einfach leichter direkt den DOM Level 1 HTML-Eigenschaft zu verwenden:

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

können Sie tun auch die Tabelle Falten im Stylesheet, die schneller sein wird und Sie die Mühe sparen über die Tabellenzeilen in Skript-Schleife mit:

table.closed tr { display: none; }

Andere Tipps

Haben Sie versucht, die Änderung dieser Zeile

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

, um so etwas wie

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

oder

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

Vielleicht möchten Sie Ihre Onclick Anruf auf dem tatsächlichen <tr> Tag legen, anstatt die einzelnen <th> Tags. Auf diese Weise können weniger JS in Ihrem HTML haben, die es besser verwaltbar machen.

Wenn Sie ermöglichen das Debuggen von Skript in IE (Tools-> Internet> Erweitert) und setzt einen "Debugger"; Anweisung im Code, IE automatisch Visual Studio bringen, wenn es die Debugger-Anweisung trifft.

Ich habe Probleme mit diesem in IE hat. Wenn ich mich richtig erinnere, ich brauchte einen Anfangswert für die „Anzeige“ Stil zu setzen, direkt auf dem HTML, wie es ursprünglich erzeugt wurde. Zum Beispiel:

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

Dann könnte ich JavaScript verwenden, um die Art zu ändern, wie Sie es tun.

ich immer style.display = "block" und style.display = "none"

verwenden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top