2009-09-16 5 views
1

J'essaie d'afficher les lignes en fonction du choix des utilisateurs. Supposons qu'il ne veut que 3 lignes, alors la quatrième et la cinquième rangée se cacheront. Veuillez trouver ci-dessous la partie de html et javascript.Erreur JavaScript lors de la tentative de masquer les lignes du tableau

HTML

<table> 
    <tr id="sRow1"> 
    <td>1a</td> 
    <td>1b</td> 
    </tr> 
    <tr id="sRow2"> 
    <td>2a</td> 
    <td>2b</td> 
    </tr> 
    <tr id="sRow3"> 
    <td>3a</td> 
    <td>3b</td> 
    </tr> 
    <tr id="sRow4"> 
    <td>4a</td> 
    <td>4b</td> 
    </tr> 
    <tr id="sRow5"> 
    <td>5a</td> 
    <td>5b</td> 
    </tr> 
</table> 

JavaScript

// b gets value from xml file   
    while (b <= 5) 
    { 
     var rowName = "sRow" + b; 
     alert(rowName); 
     try { 
      document.getElementById(rowName).style.display = "none"; 
     } 
     catch (err) 
     { 
      alert(err.description) 
     } 
     b++; 
    } 

J'obtiens l'erreur de l'objet nécessaire à document.getElementById (rowName) .style.display = "none" ;. Peux-tu aider s'il te plait.

+2

Je ne vois pas pourquoi vous auriez besoin d'essayer ici. Êtes-vous sûr que 'document.getElementById (rowName)' trouve réellement l'élément? Si ce n'est pas le cas, il devrait retourner 'null' et l'accès à la propriété supplémentaire - c'est-à-dire' .style.display' - devrait entraîner une erreur. Pour éviter cela, il suffit de vérifier l'existence de l'élément avant d'essayer de définir son style. – kangax

+0

Fonctionne pour moi par exemple. 'b = 4'. Peut-être que «b» n'est pas ce que vous attendiez? Quel est le rowName que vous avez alerté juste avant l'erreur? – bobince

+0

Une autre observation étrange, si je change les noms d'id de sRow en sib, cela fonctionne. Est-ce que sRow est un mot-clé? Cordialement – kobra

Répondre

1

vous manque le bit intéressant (où b vient), donc je vais deviner juste: parfoisb est pas réellement un nombre compris entre 1 et 5 inclus. Peut-être que c'est une chaîne qui ne format pas proprement à un nombre à un chiffre 1-5, ou peut-être c'est autre chose entièrement ... Rendons votre code un peu plus sûr, juste au cas où:

// b gets value from xml file 

// ensure b is a number - will fail comparison if NaN 
b = new Number(b); 
while (b <= 5) 
{ 
    var rowName = "sRow" + b; 
    var row = document.getElementById(rowName); 
    if (row) // verify element was found before trying to modify it! 
    row.style.display = "none"; 
    b++; 
} 

Notez que j'ai enlevé le try {} catch - vous êtes mieux juste tester la valeur de retour de getElementById(), puisque cela ne pas interférer avec le débogage si vous souhaitez utiliser un débogueur plus tard ...

+0

Merci. alerts (rowName) affiche l'identifiant correct. Donc, la valeur de b n'est pas le problème. Cordialement – kobra

+0

@kobra: êtes-vous * sûr *? Il est notoirement difficile de voir les espaces à la fin d'une chaîne affichée dans un dialogue 'alert()' ... –

+0

@Vagabond - mettre la déclaration dans le try {} a résolu le problème, ce qui en fait un problème de portée. – karim79

1

Dans mon expérience, vous obtiendrez des résultats incohérents sur différents navigateurs en essayant de rendre les lignes de table invisibles en modifiant les attributs de style. Une chose plus sûre à faire est de supprimer et d'insérer les lignes de la table en utilisant les méthodes dom insertRow() et deleteRow() sur l'objet table. Ceci est correctement pris en charge dans tous les principaux navigateurs que vous êtes susceptible de rencontrer.

+0

Merci. Pouvez-vous montrer quelques exemples? Je trouve cela intéressant. Cordialement. – kobra

+0

Bien sûr. Il y a des exemples de code dans les liens de nom de méthode dans ma réponse. Voir au dessus. :) – Asaph

+0

Merci. Désolé pour donner sur. Observe – kobra

0

Je pense qu'il vous manque l'attribut runat avec l'identifiant de ligne, comme vous l'avez mentionné l'identifiant de la ligne mais sans l'attribut runat, si vous ne mentionnez pas l'attribut runat, cette erreur arrive.

+0

C'est une simple page web html avec javascript. Donc la question du serveur runat ou du client ne se pose pas. Cordialement – kobra

Questions connexes