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()
.
Oui, il y a aussi ça :) Je contourne cela en utilisant la classe plutôt que l'id dans certaines situations. –
vous semblez avoir tout changé: filter1_ hmm qui craint :) – Mikael
si vous utilisez jquery un correctif sale utiliserait $ ("[id $ = lala]") au lieu de $ ("# lala") dans vos sélecteurs – bevacqua