0

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

该控件运行良好,直到您将控件的两个实例放在同一页面上——因为它们引用完全相同的 Javascript 函数,所以只有一个控件可以工作。

我怎样才能利用我拥有的这个功能,这 1200 行 Javascript,并使控件的每个实例都可以引用它的每个唯一的 Javascript 实例?

4

2 回答 2

1

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

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

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

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

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

于 2010-05-10T23:26:22.383 回答
0

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

另外,您的 JS 是根据任何旧实例编写的吗?例如,您是否有类似 Load(oControlName) 的函数,或者 Load() 函数内部是否有硬编码的实例名称?

IMO,试图获得多个“JavaScript”并不是前进的道路——重构你的代码可能会更快地得到你的答案。

于 2010-05-11T00:14:42.700 回答