我在页面上有<asp:TextBox runat="server" ID="lastName" />
,我想用jQuery设置焦点,但它没有返回它。我的代码是这样的:
$.ready() {
var tb = $('lastName').focus(); // don't work, why?
}
答案 0 :(得分:12)
您需要解决两个不同的问题:格式错误的选择器以及ASP.NET客户端ID中的与服务器ID 不匹配的事实。
你想要的是:
$.ready() {
$('#<%= lastName.ClientID %>').focus();
}
让我们分解......
首先,在jQuery中,通过它的id
属性访问元素的选择器需要以“#”符号开头。因此访问者看起来应该更像:{{1} }。 jQuery中的选择器类似,但比CSS更强大。您可以在jQuery API站点上熟悉selector syntax。
其次,使用ASP.NET,分配给HTML元素的id通常与识别服务器上的asp控件的id不同。这是因为ASP.NET需要确保所有元素是唯一标识的 - 并且不会与可能在母版页,用户控件或重复的内容部分中定义的名称发生冲突。这些ID往往很长并且通常无法预测 - 幸运的是,我们可以将$('#lastName')
代码扩展与控件的<%= %>
属性一起使用,以便为HTML元素插入适当的id而无需了解ASP.NET如何分配唯一ID的详细信息。
在ASP.NET 4.0中,现在可以直接指定客户端ID,这有助于避免上面显示的技术。
答案 1 :(得分:1)
这是我用于在具有母版页的页面中选择服务器控件的函数。它在所有情况下都不起作用,例如嵌套控件,但对于更简单的东西,它真的很方便。
这可以在某个地方的主页上进行
<script type="text/javascript">
baseName = "<%= Content.ClientID %>_";
</script>
使用此功能,您可以使用GetServerElementById(“lastname”)
function GetServerElementById(id) {
return $("#" + baseName + id);
}
答案 2 :(得分:1)
您可以执行部分属性查询:
<script type="text/javascript">
$(function(){
$('#btnExtract').click(
function() {
alert($("input[id$='txtMessage").val());
}
);
});