1

首先,我正在开发一个应用程序,该应用程序的编写使得一些典型的调试工具无法使用(或者至少我不知道如何使用 :)。

JavaScript、html 等在部署之前都是“熟”和编码的(我认为;我对这个过程的工作原理有点模糊),所以我不能将 VS 2005 附加到 ie,并且 firebug lite 不起作用好。此外,界面在框架中(糟糕),因此其他一些工具也无法正常工作。

Firebug 在 Firefox 中运行良好,它没有这个问题(Safari 也没有),所以我希望有人可能会发现我的代码在 IE 上运行的方式“明显”有问题。可以提供更多关于它的古怪的信息,但让我们从这个开始。

基本上,我有一个函数可以通过使普通表行不可见来将表“折叠”到它们的标题中。我有"onclick='toggleDisplay("theTableElement", "theCollapseImageElement")'"标签<tr>,表格以“class='closed'”开头。

在 FF 和 Safari 中单击折叠和展开表格,但 IE 表格需要多次单击(看似 1 到 5 之间的任意数字)才能展开。有时,在最初“打开”后,只需单击一会儿,表格就会展开和折叠,但最终会恢复为需要多次单击。我可以从我在 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 beta 中修复,但直接使用 DOM Level 1 HTML 属性更容易:

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

您还可以在样式表中进行表格折叠,这样会更快,并且可以省去在脚本中循环遍历表格行的麻烦:

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

您可能希望将 onclick 调用放在实际<tr>标签上,而不是单个<th>标签上。这样,您的 HTML 中的 JS 就更少了,这将使其更易于维护。

于 2008-09-19T14:36:20.317 回答
0

如果您在 IE 中启用脚本调试(工具-> Internet 选项-> 高级)并放置一个“调试器;” 代码中的语句,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

我总是使用 style.display = "block" 和 style.display = "none"

于 2008-09-19T15:50:04.133 回答