Appelle d'une fonction javascript dans le code behind [Résolu]

Messages postés
34
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
10 avril 2006
- - Dernière réponse : jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
- 20 août 2004 à 18:30
Bonjour,

J'essaye de construire un tableau qui doit posseder les propriétés extend et collapse.
Ce tableau se remplit a l'aide des données d'une table oracle et suivant les parametres sélectionnés par l'utilisateur.

je gere l'extand et collapse grace a des fonctions javascript, qui se declanchent lors de l'evenement onclick des balises <td> de mon tableau.
Le probleme, c'est que je n'arrive pas a faire fonctionner mes fonctions javascript....quand je clique sur les case, il ne se passe abolument rien...

est-ce que c'est parceque je les appelle d'une mauvaise facon ?

voici le code que j'utilise:

au moment de créer le tableau, dans le code behind

au depart, j'utilise une fonction fulltree qui, si la variable fullmode est a 'expand' affiche tout l'arbre et passe la variable fullmode a 'collapse', sinon n'affiche que les niveaux 0 et passe la variable a 'expand'. J'utilise ensuite la fonction showMode qui ne sert qu'a afficher un (+) ou un (-) suivant si l'arbre est deroule ou pas.

Je les appelle ainsi :

Page.Response.Write("<TR><TD id=PersonType name=PersonType valign=CENTER onclick="javascript:fulltree('" + title + "')" >");
Page.Response.Write(title);
Page.Response.Write("<SCRIPT language="JavaScript" type="text/javascript">showMode()</SCRIPT>");

puis, dans chaque balise TD, j'appelle une fonction sur l'evenement OnClick, qui permettra de montrer les ligne enfants si on clique dessus, ou de les cacher si on re-clique.

while(dr.Read())
{
if (lno > 1) //lno = niveau de la ligne dans l'arbre
{
//ligne 1 puis a chaque passage du dr avance d'une ligne
Page.Response.Write("<TR class=level" + lno.ToString() + " style="display: none;">");
//colonne 1
Page.Response.Write("<TD onclick="javascript:showrow(this.parentNode.rowIndex)" class="level" + lno.ToString() + "">" + dr.GetString(2));
}
else //=si niveau 0
{
//ligne 1 puis a chaque passage du dr avance d'une ligne
Page.Response.Write( "<TR class=level" + lno.ToString() + " >");
//colonne 1
Page.Response.Write( "<TD onclick="javascript:showrow(this.parentNode.rowIndex)" class="level" + lno.ToString() + "">" + dr.GetString(2) );
}

et voici la fonction qui se trouve sur la page page aspx, entre les balises <SCRIPT language="JavaScript" type="text/javascript"> et </script> du code html

function showrow(rowid)
{
var currow , level, childlevel

currow = rowid
level = parseInt(ClasTab.rows[currow].cells[15].innerHTML)

currow++;

if (ClasTab.rows[currow].style.display == "none")
{
mode = "open"
}
else
{
mode = "close"
}

if (currow < maxrows)
{
childlevel = parseInt(ClasTab.rows[currow].cells[15].innerHTML)

while ( childlevel > level) {if ((childlevel level+1) || mode "close")
{
toggleRow(ClasTab.rows[currow])
}
currow++;
if (currow == maxrows) {break}
childlevel = parseInt(ClasTab.rows[currow].cells[15].innerHTML)
}
}
}

Merci beaucoup de votre aide !!
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
3
Merci
pffff je suis fatigué :d

oui effectivement c'est tout simplement literal et non literalcontrol
pour le withevents, c'est le code VB, j'avais oublié que tu travaillais en C# :) mais le principal c'est que ce soit bon maintenant

encore une derniere astuce :
au lieu d'ecrire
lc.Text = lc.Text +"";
lc.Text = lc.Text +"";
lc.Text = lc.Text +"";

ecrit donc

lc.Text +="";
lc.Text +="";
lc.Text +="";

pour ce qui est de l'erreur qu'il te reste, IE ne peux t'indiquer que des erreurs de Javascript, donc investigue de ce coté

@+

PS : si ma reponse te convient, cliques sur accepter la reponse, ainsi les personnes qui regardent le forum, voit que ce problème à une solution

Cyril

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 218 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
0
Merci
C'est deja un peu plus clair avec toutes les étapes :)

donc regarde si alert ca marche, comme je te l'ai indiqué sur l'autre post

sinon je viens de penser à qqchose, et je pense que ce serait ca:

je suppose que ta page aspx est en gros comme ca :

<%@ page ... %>
<html>
<head>
<script langage="javascript">
function showrow(rowid)
{
...
}
</script>
</head>

</html>

tu fais un response.write, or le response.write ecrit au debut de la page c'est à dire que tu auras le code ecrit ici :

<TR><TD id=PersonType name=PersonType valign=CENTER onclick="javascript:fulltree("title")>
....
<html>
<head>
<script langage="javascript">
function showrow(rowid)
{
...
}
</script>
</head>

</html>

C'est la ou est le problème, car tu appelle fulltree alors que le navigateur la connait encore pas, car il lit la page de haut en bas.

donc pour palier à ce problème il suffit de faire

dans ton aspx :

dans le code behind
protected withevents lc as LiteralControl

et à la place de tes response.write tu n'as plus qu'a ecrire
lc.innerText = "<tr> ...

Je pense que normalement la ca devrait marcher, pour plus d'info sur ce sujet, je t'invite à consulter mon tuto : http://www.aspfr.com/tutorial.aspx?id=30

@+

Cyril
Commenter la réponse de jesusonline
Messages postés
34
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
10 avril 2006
1
0
Merci
ca ne marche pas.

comme tu me l'as conseillé, j'ai ajouté au debut de ma page aspx.cs

public class clas : System.Web.UI.Page
{
protected withevents LiteralControl lc ;

et dans la page aspx j'ai

<MS_POSITIONING="GridLayout">

<form id="Form1" method="post" runat="server">
</form>

j'avais mis au départ mais il ne reconnaissait pas cette balise. dans ton tutorial, j'ai vu que c'était simplement asp:literal.

j'ai une erreur sur protected withevents LiteralControl lc ;

Invalid token ';' in class, struct, or interface member declaration

est-ce que c'est bien cela que tu me disais de faire ?

merci bcp pour ton aide !!
Commenter la réponse de amel468
Messages postés
34
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
10 avril 2006
1
0
Merci
j'ai tenté de remplacer

protected withevents LiteralControl lc ;

par

protected System.Web.UI.WebControls.Literal lc;

et les lc.InnerText par

lc.Text = lc.Text + ...

j'ai donc une série de truc de ce genre:

lc.Text = lc.Text +"";
lc.Text = lc.Text +"";
lc.Text = lc.Text +"";

mais le résultat est catastrophique puisque seul mon tableau s'affiche, sans mise en forme maintenant, et les scripts ne fonctionnent toujours pas.
Commenter la réponse de amel468
Messages postés
34
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
10 avril 2006
1
0
Merci
OK, ca va mieux, j'avais juste oublié un "lc.text + "

toute ma page s'affiche correctement mais quand je veux cliquer sur une case de mon tableau, il ecrit dans la barre d'etat qu'il y a une erreur sur la page et rien ne se passe.

j'ai vérifié la source, les fonctions javascript s'affichent avant désormais.

le probleme vient surement de mes fonctions. je vais investiguer.....

merci pour les conseils que tu m'as donné !
Commenter la réponse de amel468
Messages postés
34
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
10 avril 2006
1
0
Merci
encore une derniere question et puis j'arrete de t'embeter...

l'erreur vient quand j'appelle ClasTab.rows[k].cells[15].innerHTML dans mes fonctions javascript... il me dit qu'il est nul, ou bien que ce n'est pas un objet.

ClasTable est défini dans la page aspx.cs de cet facon

lc.Text += "
<TABLE ID="ClasTab" class=clas Name=ClasTab border=1 width =75% cellspacing=0 cellpadding=0 >" ;

y'a -t-il un truc que j'ai oublié de faire ?
Commenter la réponse de amel468
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
0
Merci
Malheureusement je suis nul en javascript :sad)

mais ton erreur à l'air d'etre qu'il ne connait pas ClasTab
tu as deux solutions:
soit tu fais ainsi :
document.Form1.ClasTab.rows[k].cells[15].innerHTML
soit comme ca :
document.getElementById("ClasTab").rows .....

Je prefere la deuxieme méthode : pourquoi ? aucune idée :)

Je suis pas du tout sur pour la casse du code que je t'ai passé, ni meme pour sa validation, car je connais vraiment pas grand chose à javascript

@+

Cyril
Commenter la réponse de jesusonline