我想在javascript中使用asp.net文本框控件(txtTest)的客户端ID。但这里的问题是控件ID来自变量,如下所示
var testName = 'txtTest';
var testCntrl = document.getElementById('<%=' + testName + '.ClientID %>');
但它的投掷
CS1012:中有太多字符 字符文字
任何人都可以帮忙......
答案 0 :(得分:2)
试试这个:
document.getElementById('<%=txtTest.ClientID %>');
或者更接近原始示例:
var testName = '<%=txtTest.ClientID %>';
var testCntrl = document.getElementById(testName);
从您的示例中可以看出,您已经设法将自己与服务器端以及客户端代码混淆。
答案 1 :(得分:1)
&lt;%= aspControlID.ClientID%&gt;是服务器端控件,但您尝试将clientide变量名称传递给它。当testName设置为'txtTest'时已经太晚了,你已经在客户端了。
有许多替代方法可以将服务器端ClientID作为Rick Stahl discusses。
1)你可以预先加载你知道你将需要的所有控件ID,当你需要它们时,他们会查询它们(他使用jquery)。
var ids = {
txtSymbol: "#<%= txtSymbol.ClientID %>",
PageContent: "#<%= PageContainer.ClientID %>"
}
这也可以写成:
var txtSymbol = document.getElementById('<%= txtSymbol.ClientID %>');
var txtBlah = document.getElementById('<%= txtBlah.ClientID %>');
2)或者,他写了一个函数,可以从客户端获得控件
function $$(id, context) {
var el = $("#" + id, context);
if (el.length < 1)
el = $("[id$=_" + id + "]", context);
return el;
}
请注意,有一些严重的警告。这依赖于JQuery,所以一定要包含该库并使用它像$$('myASPControlID')。val('new val');问题在于,如果您有任何控件可以创建其他控件,例如listviews,repeater,gridviews等。那么查找子控件的单个实例将采取一些策略。在这种情况下,此工具只会获得重复控件的第一个实例。
但是,该函数提供了一种解决此问题的方法,允许您在第二个字段中指定包含元素。
修改强>
嘿L G,如果你真的需要从客户端传递你的变量,那么只需添加第二个函数和一个指向JQuery库的链接。然后,您可以使用这个简单的代码来控制:
var testName = 'txtTest';
var testCntrl = $$(testName);
答案 2 :(得分:0)
如果它是C#代码(假设编译错误),则需要用"
而不是'
包围字符串。
'
用于char值,它只能包含一个字符(如果是转义字符,则为两个字符,例如'\n'
)。
但是我并没有真正得到编译错误和代码之间的联系,因为C#编译器不应该为javascript代码烦恼...