当我使用这个"#<%= txtNumberOfDrugsInKit.ClientID %>"
时,我可以从我的JQuery脚本访问服务器控件;但是当我把它放在外部脚本文件中时,它不起作用。
如何从外部JavaScript文件访问asp文本框?我不相信这不起作用。
答案 0 :(得分:3)
我所做的是在我的主页面上(而不是在外部文件中)放置一个脚本,该脚本仅包含如下对象定义:
var Controls = {
'Name':<%="'" + txtNumberOfDrugsInKit.ClientID%>',
'OtherName':<%="'" + otherControl.ClientID%>'
};
这里的诀窍是你必须将它放在标题中,或者你不能从外部文件中使用它,因此你必须在头元素声明中添加runat="server"
。这也解释了为什么我使用对象而不是简单的变量名称;它最大限度地减少了在其他地方发生命名冲突的可能性(我只担心“控件”名称)。
然后我可以在外部脚本中使用Controls对象,如下所示:
var OtherElement = document.getElementById(Controls.OtherName);
或
var jQueryObj = $('#' + Controls.OtherName);
见这里的另一个例子:
Can I count on ctl00_PagePlaceHolder_myId staying the same?
答案 1 :(得分:2)
我认为文章会帮助你。 http://lanitdev.wordpress.com/2009/06/08/extending-jquery-to-select-asp-controls/ +
我已经使用过这个解决方案,它可以很好地选择服务器控件而无需添加额外的标记。
答案 2 :(得分:0)
我认为#<%= txtNumberOfDrugsInKit.ClientID %>
会在服务器端进行评估,所以当然它在外部js中不起作用,因为它们是静态服务的,而不是在服务器端处理。
我认为您并不完全了解服务器上运行的代码以及客户端上运行的代码。将数据传递到外部脚本的一种方法是将其放入隐藏的输入或隐藏的div中,然后从外部脚本中的DOM元素读取。
答案 3 :(得分:0)
“#&lt;%= txtNumberOfDrugsInKit.ClientID%&gt;”很可能不会在外部JS文件中执行,因为它不是ASP.NET页面的一部分 你必须“硬编码”这个ID。
但是如果您遇到ASP.NET生成的“怪异”ID问题,那么您可以将ClientID放入隐藏字段并从外部JS文件中读取它
答案 4 :(得分:0)
我过去所做的就是使用CSS名称代替。在txtNumberOfDrugsInKit控件上,您可以执行以下操作...
<asp:TextBox ID="txtNumberOfDrugsInKit" CssClass="txtNumberOfDrugsInKit" ... />
然后在您的jQuery中,您可以通过类名引用它,而不是将其引用为$("#<%= txtNumberOfDrugsInKit.ClientID %>")
。在这种情况下,你只需$(".txtNumberOfDrugsInKit")
。只要您在页面上保留这些选择器的唯一性 - 只需用它来选择一个控件就没问题了。