【发布时间】:2009-12-29 21:21:10
【问题描述】:
我的页面上有两个表单元素,它们充当流畅的登录面板。当您激活面板时,您可以输入您的电子邮件地址和密码进行登录。在它们旁边是一个<asp:LinkButton...,它带有一个绑定为单击处理程序的 C# 函数。该功能将发布到另一个登录页面(我们必须根据我们的应用程序与其他站点的交互方式来执行此操作)并设置一些登录 cookie。当我输入我的凭据并实际单击按钮时,一切正常。当我输入我的电子邮件,然后我的密码,然后按 [ENTER] 键时,登录按钮的单击处理程序不会触发。好的,那又怎样?我以前处理过这个。以下是我尝试解决此问题的所有方法没有成功:
在登录按钮后添加了一个额外的隐藏文本框
<asp:TextBox ID="tb1" runat="server" Style="display:none; visibility:hidden;"></asp:TextBox>
没有成功。
在表单上设置DefaultButton 属性(因为我在 MasterPage 中):
<form DefaultButton="lbLogin">
没有成功。
将我的字段包装在 <asp:Panel ... > 中并设置 DefaultButton 属性
<asp:Panel ID="pnlFields" DefaultButton="lbLogin" runat="server">... my stuff here ...</asp:Panel>
没有成功。
开始通过jQuery抓包:
// if I hit enter on ANY input, simulate a click of the login button
$(".login-fields input").keypress(function(e) {
if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {
$(".btnLogin").click();
return false;
}
});
$(".btnLogin").click(); 不起作用,所以我尝试了$(".btnLogin").trigger("click");。不好。我还尝试了$(".btnLogin").submit();,我知道这行不通(但我还是尝试了)。
因为有一个return false,所以它什么也没做,所以我删除了它并再次尝试了这些场景。没有骰子。
我之前读过 keypress 可能不是一个好的 JavaScript 事件,所以我在上述场景中也尝试了 keyup,但仍然一无所获。
现在,这是唯一似乎可行的事情,它涉及使用 JavaScript eval():
// if I hit enter on ANY input, simulate a click of the login button
$(".login-fields input").keypress(function(e) {
if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {
eval( $(".btnLogin").attr("href") ); // BAD! right?
}
});
有谁知道我如何在不在 JS 中执行 eval() 的情况下使其工作?供参考,这是实际生成的登录链接href:
javascript:__doPostBack('ctl00$lbLogin','')
【问题讨论】: