2

我正在编写一个带有会员登录表单的网站母版页以下是母版页的标记:

<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$”,然后从控制台我可以看到我收到以下错误 Uncaught TypeError: Cannot read property 'value' of undefined

我试图在网上查找这是怎么回事,似乎这是 .NET 自动执行的操作。然而,我找不到让我的帖子脚本正常工作的方法。

我不需要保留没有 ct100 的 ID,只要发布脚本可以工作,我尝试更改为 f.ct100$input_memID 等但不工作

还尝试了 clientIDMode="Static" 但无法使其正常工作,或者浏览器抱怨 clientIDMode 不是 <% PAGE %> 的属性

那么有人可以请教我该怎么办吗?提前致谢!

4

4 回答 4

3

ClientIDMode是一个可以添加到 单个控件的属性。

此外(来自 MSDN):

您可以通过在网站的 Web.config 文件中设置 pages 元素来为网站中的所有页面设置 ClientIDMode 值。您可以在 @ Page 指令中设置页面的 ClientIDMode 值。

例如:

<div id="dvDiv" runat="server" clientidmode="Static" />

将使 div 的名称在客户端和服务器端都为“dvDiv”。

所以$("#dvDiv")在客户端可以正常工作。

关于您的最后一句话,请确保您将其放入<%@ Page %> 而不是放入<% Page %>(注意@标志)

于 2013-01-07T11:23:21.557 回答
0

您可以简单地使用此 jquery 选择器来获取您想要的任何元素:-

$("[id$='yourElementID']")// Select an Element whose ID ends with yourElementID

例子 :-

 $("[id$='submitLogin']").click(function(){
        var f = $("[id$='loginForm']").get(0);
     ....................

在此处查看详细信息

于 2013-01-07T11:33:18.740 回答
0

尽管 Blachshma 的回答非常合理并且会解决您的问题,但我建议您简单地取消runat="server"输入的属性。

HtmlInputText如果您不需要从页面代码隐藏中引用它们,我看不出您有任何真正的理由将它们作为对象存在。

编辑:根据评论,如果您确实需要从代码隐藏中访问它们,那么最好将 ClientIDMode 更改为 Static。

于 2013-01-07T11:33:24.693 回答
0

如果 Javascript 代码包含在 aspx 标记中,您也可以使用

var f = $('#<%= loginForm.ClientID %>').get(0);
于 2013-01-07T11:33:46.497 回答