我一直在使用带有onserverclick属性的html按钮时遇到了一些非常奇怪的行为。我想要做的是使用jQuery来指定页面上的默认按钮。默认情况下,按钮我的意思是当用户点击输入时“点击”按钮。在测试中,我会在输入字段中输入,有时会单击预期的“默认”按钮,并在相应的onserverclick属性中定义服务器端方法。其他时候,回发没有触及服务器方法。为了隔离这个问题,我创建了一个最小的测试用例,并发现了一些非常有趣的结果。asp.net中的html按钮元素和onserverclick属性
客户端:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="/scripts/jquery-1.4.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="_response" runat="server"></asp:Label>
<input id="input1" type="text" />
<input id="input2" type="text" />
<button id="first" type="button" class="defaultBtn" runat="server" onserverclick="ServerMethod1">test1</button>
<button id="second" type="button" runat="server" onserverclick="ServerMethod2">test2</button>
</form>
<script type="text/javascript">
jQuery('form input').keyup(
function(e) {
if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
$('button.defaultBtn').click();
return true;
}
}
);
</script>
</body>
</html>
服务器端:
public partial class admin_spikes_ButtonSubmitTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ServerMethod1(object sender, EventArgs e)
{
_response.Text = "server method1 was hit";
}
protected void ServerMethod2(object sender, EventArgs e)
{
_response.Text = "server method2 was hit";
}
}
我发现的是,一切都按这个代码除了当我删除输入要素之一预期。在Firefox 3.6和IE 8中,当页面上只有一个输入时,按回车键不会触发onserverclick,它甚至不会被jQuery“点击”或实际“点击”回发。您可以通过从两个输入开始并单击“test2”来测试此项。这将输出“服务器method2被击中”。然后敲回车,输出将是“服务器method1被击中,现在拿走一个输入并运行相同的测试,点击”test2“查看结果,然后按回车,你会发现没有什么会改变,因为”test1“方法从不打没有人知道是怎么回事
感谢
PS铬和预期一样
nope仍然遇到相同的行为。我认为我的测试指出,当有一个输入时,这个按键事件甚至没有被解雇。该页面刚刚提交。感谢您尝试通过 – 2010-02-02 05:41:40
尝试替换:
您的解决方案,但现在我没有与HTML按钮标签的CSS灵活性,因为asp:按钮呈现为输入类型=提交 – 2010-02-02 06:17:18