我正在撰写一个网站母版页面,其中包含会员登录表单 以下是母版页的标记:
<form id="loginForm" action="account.aspx" method="POST">
<div class="div-topHead">
<input type="button" id="submitLogin" title="Login" value="Login" />
<input type="button" id="forgetPW" title="Forget password" value="?" onclick="window.open('forgetpassword.aspx','_self')" />
</div>
<div class="div-topTail">
<div class="div-login">
<div class="row-body row-def">
<input id="input_memID" name="input_memID" runat="server" type="text" maxlength="255" />
</div>
<div class="row-header row-def">
Member ID:
</div>
</div>
<div class="div-login">
<div class="row-body row-def">
<input id="input_memPW" name="input_memPW" runat="server" type="password" maxlength="255" />
</div>
<div class="row-header row-def">
Password:
</div>
</div>
</div>
</form>
及以下是发布脚本
$(function(){
$('#submitLogin').click(function(){
var f = $('#loginForm').get(0);
$.post("../script/loginCheck.aspx", { "memID": f.inputID.value, "memPW": f.inputPW.value }, function(data){
var result = JSON.parse(data);
if(result[0] == 1){
//Login validated
f.submit();
} else {
//Login is invalid
alert(result[1]);
}
});
});
});
问题是,当我在浏览器上打开网站时, 文本输入字段名称会自动添加前缀“c100 $” 然后从控制台我可以看到我得到以下错误 未捕获的TypeError:无法读取未定义的属性“值”
我试图在网上查找这是怎么回事, 似乎这是.NET自动执行的操作。 然而,我找不到让我的帖子脚本有效的方法。
我不需要像没有ct100那样保留ID, 只要发布脚本可以工作 我尝试更改为f.ct100 $ input_memID等但无法正常工作
还尝试了clientIDMode =“Static”但无法使其正常工作 浏览器抱怨clientIDMode不是&lt;%PAGE%&gt;
的属性有人可以请您告诉我该怎么办? 提前致谢!
答案 0 :(得分:3)
ClientIDMode 是可以添加到各个控件的属性。
另外(来自MSDN):
您可以通过在站点的Web.config文件中设置pages元素来为网站中的所有页面设置ClientIDMode值。您可以在@ Page指令中为页面设置ClientIDMode值。
例如:
<div id="dvDiv" runat="server" clientidmode="Static" />
将客户端和服务器端的div名称设为“dvDiv”。
所以$("#dvDiv")
在客户端可以正常工作。
关于您的上一条评论,请务必将其放在<%@ Page %>
而不是<% Page %>
(请注意@
符号)
答案 1 :(得分:0)
您可以简单地使用此jquery选择器来获取您想要的任何元素: -
$("[id$='yourElementID']")// Select an Element whose ID ends with yourElementID
示例: -
$("[id$='submitLogin']").click(function(){
var f = $("[id$='loginForm']").get(0);
....................
答案 2 :(得分:0)
虽然Blachshma的答案非常合理并且可以解决您的问题,但我建议您只需取消输入中的runat="server"
属性。
如果你不需要从页面代码隐藏中引用它们,我看不出你有任何真正的理由让它们作为HtmlInputText
对象存在。
编辑:根据评论,如果您确实需要从代码隐藏中访问它们,那么只需将ClientIDMode更改为静态就更好了。
答案 3 :(得分:0)
如果Javascript代码包含在aspx标记中,您也可以使用
var f = $('#<%= loginForm.ClientID %>').get(0);