2010-10-22 5 views
0

J'ai commencé à utiliser ascx hier et j'ai commencé à découper ma page "dynamique" default.aspx en plus petites parties.Passer les événements jquery de aspx à ascx

Dans mon fichier default.aspx, j'ai beaucoup de code JavaScript/jquery qui gère différents événements. Lorsque j'ai enlevé du code html de .aspx, tout en laissant le javascript dans default.aspx, et que je l'ai placé dans .ascx, les événements jquery ont cessé de fonctionner, dois-je écrire quelque chose de spécial pour que mon JavaScript puisse accéder au html dans mon usercontrol?

Merci M

Répondre

0

prendre en considération cet élément Ids changement de choses comme Control1 à ctl00stuff_Control1 quand vous les mettez dans l'utilisateur contrôles

+0

Oui, il y a aussi ça :) Je contourne cela en utilisant la classe plutôt que l'id dans certaines situations. –

+0

vous semblez avoir tout changé: filter1_ hmm qui craint :) – Mikael

+0

si vous utilisez jquery un correctif sale utiliserait $ ("[id $ = lala]") au lieu de $ ("# lala") dans vos sélecteurs – bevacqua

0

Le côté client JavaScript n'a pas connaissance de l'ascx. Les ascx sont inclus dans la page avant d'être envoyés au navigateur afin que le navigateur ne voit que comme une seule page.

Il est plus probable que le JavaScript ait cessé de fonctionner car il n'a pas pu trouver un élément avec un ID ou une classe spécifique. Cela a pu se produire pour un certain nombre de raisons, telles que l'élément est réellement manquant ou le .net a dynamiquement changé l'ID.

+0

tous id semble être le même:/ – Mikael

+1

avait donc été changé de façon dynamique de l'ID? ;-) –

0

J'ai des pages qui contiennent des contrôles utilisateur qui contiennent également d'autres contrôles utilisateur. J'ai eu le même problème avec les événements et la pile de rendu de page avec cette structure. Pour résoudre ce problème, j'ai placé la gestion des événements spécifiques au contrôle utilisateur dans un fichier .js séparé tel que mycontrol.js et référencé par .js dans le fichier .ascx (placez-y le lien).

J'ai également eu une situation où je n'avais pas rendu le contrôle de l'utilisateur jusqu'à ce qu'il soit placé dans le balisage (un sous-contrôle) et donc les événements ne pouvaient pas être placés à ce point. Je me suis occupé ce, en chargeant l'utilisateur contrôle javascript dans mon javascript ainsi:

/* function to allow inclusion of other files 
Included this way to allow addition AFTER the page renders the control - that is, fake inclusion in this file 
*/ 
function includeJS(jsPath) 
{ 
    var script = document.createElement("script"); 
    script.setAttribute("type", "text/javascript"); 
    script.setAttribute("src", jsPath); 
    document.getElementsByTagName("head")[0].appendChild(script); 
}; 
includeJS('Js/secondusercontrol.js'); 
  • code de script séparé pour les contrôles utilisateur et lien dans les contrôles utilisateur
  • Inclure les fichiers .js en utilisant un script si la latence est un problème
  • mettre tout script "de base" et les objets globaux (le cas échéant) dans la page du fichier de
  • utilisation .live() et .delegate()

EDIT: une autre option qui peut fonctionner pour vous j'ai oublié initialement est d'utiliser la .live() et/ou la fonctionnalité .delegate().

Questions connexes