从外部javascript文件获取用户控件的clientid

我在ASP.NET中开发一个用户控件(ascx),它使用javascript来操作控件。 目前,javascript代码已内联并使用来获取所需的控件。

我想将javascript文件放在外部文件中,但是从外部文件我不能使用上面的语法来检索控件。 我已经阅读了关于此问题的可能解决方案和这个答案,但问题是用户控件可以在页面上多次放置。 这意味着Controls数组(在答案中提到)将使用不同的项目多次呈现。 因此,脚本将无法检索所需的ID。 如果我将放在包含项目的数组的名称中,那么我将遇到与我试图解决的问题相同的问题。

有任何想法吗?

好的,一种不同的方法,我尝试使用JavaScript类样式,然后为每个控件初始化它。

在外部javascript文件中,将代码编写为:

 function oNameCls(ControlId1) { this.ControlId1 = ControlId1; this.DoYourWork1 = function() { // use the control id. // this.ControlId1 } this.DoYourWork2 = function() { // use the control id. // this.ControlId1 } } 

在控制上做这样的呼叫。

  

希望现在帮助更好。

我解决这个问题的方法是使用CSS类或将控件放在具有已知ID的容器中,然后遍历容器的子节点以获取实际控件。 例如:

  

可通过以下方式访问:

 jQuery('.mycontrol'); 

要么:

 

可通过以下方式访问:

 jQuery("#ControlContainer input[type='text']"); 

这种方法唯一真正的问题是你将代码绑定到页面上的特定标记,如果标记发生很大变化,这可能会很麻烦。

隐藏变量怎么样:

  

然后从你的js:

 $("#" + $("#ClientID").val()) 

或者,将哈希放入:

  ... $($("#ClientID").val()) 

如果要在可能有多个副本时找到特定控件,则无法执行此操作。 外部JavaScript如何知道您想要的n控件中的哪一个?

如何将行为assembly到类并找到相对于动作控件位置的元素,如下所示:

用户控件:

 
Show me!

如果你的jQuery写得像这样相对:

 $(".myControl input").click(function() { $(this).next().slideDown(); }); 

在这种情况下,只要您可以相对于您需要的控件导航DOM,那么具体ID是什么并不重要。 即使它更复杂,如.closest("div").next().find(".bob").prev() ……无论你需要做什么工作。