Question

Tout d'abord, je travaille sur une application qui est écrite de manière à ce que certains de vos outils de débogage classiques ne puissent pas être utilisés (ou du moins, je ne vois pas comment :).

JavaScript, html, etc. sont tous & "cuisinés &"; et encodé (je pense; je suis un peu flou sur le fonctionnement du processus) avant d'être déployé, je ne peux donc pas joindre VS 2005 à-dire, et firebug lite ne fonctionne pas bien. En outre, l’interface est dans les cadres (beurk), donc certains autres outils ne fonctionnent pas aussi bien.

Firebug fonctionne très bien dans Firefox, qui n'a pas ce problème (pas plus que Safari), j'espère donc que quelqu'un pourra repérer quelque chose & "évidemment &"; mal avec la façon dont mon code va jouer avec IE. Il y a plus d'informations qui peuvent être données sur son originalité, mais commençons par ceci.

En gros, j’ai une fonction qui & "réduit" & "; tableaux dans leurs en-têtes en rendant les lignes normales non visibles. J'ai "onclick='toggleDisplay("theTableElement", "theCollapseImageElement")'" dans les balises <tr> et les tableaux commencent par & Quot; class = 'closed' & Quot ;.

Les clics simples réduisent et développent les tables dans FF & amp; Safari, mais les tables IE nécessitent plusieurs clics (un nombre apparemment arbitraire compris entre 1 et 5) pour se développer. Parfois, après avoir initialement & "Ouvert"!, Les tables s’agrandiront et s’effondreront en un seul clic pendant quelques instants, pour ensuite revenir à la nécessité de plusieurs clics. Je peux voir dans le peu que je peux voir dans Visual Studio que la fonction est effectivement atteinte à chaque fois. Merci d'avance pour tout conseil!

Voici le code 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);
    }
}

& # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173 ; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; < !> # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173; & # 173 ; & # 173; & # 173;

Était-ce utile?

La solution

setAttribute n'est pas fiable dans IE. Il traite l'accès d'accès aux attributs et aux propriétés d'objet comme étant identique, de sorte que la propriété DOM de l'attribut 'class' s'appelle 'className', vous devrez l'utiliser à la place sur IE.

Ce bogue est corrigé dans la nouvelle version bêta d'IE8, mais il est plus simple d'utiliser directement la propriété HTML DOM Niveau 1 directement:

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

Vous pouvez également plier la table dans la feuille de style, ce qui sera plus rapide et vous évitera d'avoir à parcourir les lignes de la table dans le script:

table.closed tr { display: none; }

Autres conseils

Avez-vous essayé de changer cette ligne

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

à quelque chose comme

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

ou

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

Vous pouvez placer votre appel onclick sur la balise <tr> actuelle plutôt que sur les balises individuelles <th>. De cette façon, votre code HTML contient moins de JS, ce qui le rendra plus facile à maintenir.

Si vous activez le débogage de script dans IE (Outils - > Options Internet - > Avancé) et mettez un "débogueur"; Dans le code, Internet Explorer affichera automatiquement Visual Studio quand il atteindra l’instruction du débogueur.

J'ai eu des problèmes avec cela dans IE. Si je me souviens bien, je devais mettre une valeur initiale pour l’affichage & "; Afficher &"; style, directement sur le code HTML tel qu’il a été généré. Par exemple:

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

Je pourrais ensuite utiliser JavaScript pour changer le style, la façon dont vous le faites.

J'utilise toujours style.display = & "bloquer &"; et style.display = & "aucun &";

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top