代码之家  ›  专栏  ›  技术社区  ›  Matt Dell

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

  •  0
  • Matt Dell  · 技术社区  · 16 年前

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

    控件工作得很好,直到您将控件的两个实例放到同一页上为止——因为它们引用了完全相同的javascript函数,所以只有一个控件工作。

    我如何利用我拥有的这个功能,这1200行的javascript,并使其成为控件的每个实例都可以引用它的每个唯一的javascript实例?

    2 回复  |  直到 16 年前
        1
  •  1
  •   EMP    16 年前

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

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

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

    在哪里? ParentControlId 是父控件的唯一ID(如果不介意长ID,可以使用control.id)。

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

        2
  •  0
  •   JBRWilkinson    16 年前

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

    另外,您的JS是根据旧实例编写的吗?例如,您是否有像LOAD(ocontrolName)这样的函数,或者LOAD()函数内部是否有硬编码的实例名?

    在我看来,试图获得多个“javascripts”并不是前进的方向——重构代码可能更快地得到答案。

    推荐文章