Appelle d'une fonction javascript dans le code behind

Résolu
amel468 Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 10 avril 2006 - 20 août 2004 à 14:19
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre 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 !!

7 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 17:55
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
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 15:28
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
0
amel468 Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 10 avril 2006 1
20 août 2004 à 16:30
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 !!
0
amel468 Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 10 avril 2006 1
20 août 2004 à 17:10
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amel468 Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 10 avril 2006 1
20 août 2004 à 17:38
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é !
0
amel468 Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 10 avril 2006 1
20 août 2004 à 18:12
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 ?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 18:30
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
0
Rejoignez-nous