2010-02-02 93 views
0

我一直在使用带有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铬和预期一样

回答

0

试试这个:?

jQuery('form input').keyup(
    function(e) { 
     if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {    
     $('#__EVENTTARGET').val($('.defaultBtn').attr('name')); 
     document.forms[0].submit(); 
     return true; 
     } 
    } 
); 

或者你可以使用DefaultButton形式的属性:

<asp:Form runat="server" id="form1" DefaultButton="first"> 
... 
</asp:Form> 
+0

nope仍然遇到相同的行为。我认为我的测试指出,当有一个输入时,这个按键事件甚至没有被解雇。该页面刚刚提交。感谢您尝试通过 – 2010-02-02 05:41:40

+0

尝试替换:

+0

您的解决方案,但现在我没有与HTML按钮标签的CSS灵活性,因为asp:按钮呈现为输入类型=提交 – 2010-02-02 06:17:18