具有多个Javascript实例的页面上的多个控件

问题描述:

我在ASP中创建了一个用于与Telligent CommunityServer集成的Web控件。该控件是用ASP编写的,有10行C#后端用于控制基于权限的UI元素的可见性,但是我认为90%的功能是直接使用Javascript。具有多个Javascript实例的页面上的多个控件

该控件的工作原理非常漂亮,直到您在同一页面上放置两个控件实例 - 因为它们引用完全相同的Javascript函数,所以只有一个控件可以工作。

我该如何利用这个功能,这1200行的Javascript,并使得控件的每个实例都可以引用其每个唯一的Javascript实例?

+0

我们需要看一些示例代码,因为按照书面的问题没有多大意义。 – Pointy 2010-05-10 23:22:18

+0

那么,有太多的代码样本...我创建了一个包含Javascript的ASCX Web控件。当我将这两个ASCX文件放在ASPX页面上时,会出现重复的Javascript。例如,它们都引用Javascript Load()函数,但Load()函数不知道要加载哪个Control。合理? – 2010-05-10 23:26:33

+0

这是TC5 +的组件还是仅仅是另一个版本的Telligent的控件? – 2010-05-11 11:51:54

如果问题只是找出哪个HTML元素触发了一个事件,那么这很容易 - 它传递给你的事件参数。 (当然,你可以获得它的父元素。)所以如果我正确地理解了这个问题,你有JavaScript函数引用一些控件,它们会被重复?

我不认为这里有什么神奇的解决方案:你只需要使ID是唯一的。如果你没有使用服务器端控件(它会自动处理这个),那么你可以使用一些服务器端生成的前缀或后缀,例如。

<input id="<%= ParentControlId %>_mytextbox" type="text" /> 

其中ParentControlId是父控件的唯一ID(你可以只使用Control.ID如果你不介意长时间的ID)。

当然,您应该尝试重新使用JavaScript函数,而不是为每个控件实例重复使用它们。如果您使用服务器生成的ID方法,则必须传递完整的ID。如果您使用前缀方法,则可以传递前缀。

您的控件如何将JavaScript引入页面?直接注入?你在使用ScriptReference吗?如果两个控件引用相同的JS(相同的URL),那么浏览器将只加载一次JS。

另外,你的JS写的任何旧实例?例如你有像Load(oControlName)这样的函数,或者Load()函数里面是否有一个硬编码的实例名?

IMO试图获得多个'JavaScript'并不是前进之路 - 重构代码可能会让您的答案更快。