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

时间:2010-05-10 23:17:42

标签: javascript asp.net user-interface telligent

我在ASP中创建了一个Web控件,用于与Telligent CommunityServer集成。该控件是用ASP编写的,带有大约10行C#后端,用于根据权限控制UI元素的可见性,但我会说90%的功能都是直接的Javascript。

控件工作得很漂亮,直到你在同一页面上删除Control的两个实例 - 因为它们引用完全相同的Javascript函数,只有一个控件有效。

如何使用我拥有的此功能,这1200行Javascript,并使控件的每个实例都能引用其每个独特的Javascript实例?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

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

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

IMO,尝试获取多个“JavaScripts”并不是前进的方法 - 重构代码可能会更快地得到答案。