我正面临一个新问题。
我正在使用jQuery来填充国家/地区下拉列表的状态下拉列表,而jquery的代码是在js文件上,所以我绑定了静态客户端ID,如ct100_ddlCountry,这在localhost上正常工作但是当我将此网站托管到Web服务器它不起作用,因为在服务器上生成的客户端是_ct100_ddlCountry。
如果有人对此有所了解,请告诉我一些事情。我是这类问题的新手。
感谢所有人。
答案 0 :(得分:1)
在js脚本包含或html源代码中硬编码控件ID通常不是好习惯。
尝试使用以下内容:
JS
function DoChange(controlid) {
$("#"+controlid);
}
HTML
<select onchange='DoChange("<%= ddlCountry.ClientID %>");' />
这意味着如果你在控制树中移动你的控件,那么你不会破坏你的代码,它应该在你的localhost和IIS上工作
<强>更新强>
或者像这样
JS
function DoChange(control) {
$(control);
}
HTML
<select onchange="DoChange(this);" />
答案 1 :(得分:1)
如果你无法升级到.NET 4.0以获得干净的id,我写了一个小的lib并将它推到CodePlex上,将控件序列化为客户端上的JSON数组。
http://awesomeclientid.codeplex.com/
http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-especially-with-net-2-0/
它序列化控件并输出一些JavaScript,如:
<script type=”text/javascript”>
//<![CDATA[
var controls = {
"txtUserName": "ctl00_ContentPlaceHolder1_txtUserName",
"txtEmail": "ctl00_ContentPlaceHolder1_txtEmail",
"btnSubmit": "ctl00_ContentPlaceHolder1_btnSubmit"
};
//]]>
</script>
然后允许您访问以下控件:
<script type=”text/javascript”>
//<![CDATA[
var element = document.getElementById(controls.btnSubmit);
//]]>
</script>
无需写意大利面条代码:)
编辑:或者,您可以使用jQuery选择器执行以下操作:
var control = $('[id*=txtEmail]');
答案 2 :(得分:0)
如果是ASP.Net 4.0,那么您可以使用ClientIDMode="Static"
来确保只有您提供的ID才能在最终标记中出现。
或者您可以使用$('id$=country')
之类的内容。 $用于匹配Id的结尾,但我确信这不是最佳的。