ASP.NET WebForms - 保持对Button控件的上下文关注

时间:2009-09-09 13:10:37

标签: asp.net events client-side

请考虑以下事项:

<form runat="server">
    <div>
        <asp:TextBox runat="server" ID="tb1" />
        <asp:Button runat="server" ID="b1" OnClick="b1_Click" />
    </div>

    <div>
        <asp:TextBox runat="server" ID="tb2" />
        <asp:Button runat="server" ID="b2" OnClick="b2_Click" />
    </div>

    <div>
        <asp:TextBox runat="server" ID="tb3" />
        <asp:Button runat="server" ID="b3" OnClick="b3_Click" />
    </div>
</form>

每个TextBox都有一个关联的Button。我希望能够在每个Button控件上切换焦点,这样当我将光标放在第二个文本框(tb2)并按Enter时,相关的按钮(b2)被点击并且相关的OnClick事件被触发。

我自己也有一些想法,但在我开始浪费时间实施破解的解决方案之前,我希望你们的反馈/经验教训。

注意:

  • 使用HTML fieldset元素不是一个选项 - 有些接口非常复杂。
  • 一个按钮可以有多个输入。

2 个答案:

答案 0 :(得分:4)

你可以在文本框上捕获keydown事件,然后触发按钮的回调javascript,如果它是回车键。您可以使用ClientScriptManager.GetPostBackEventReference

获取回调参考

或者你可以将每个文本框包装在它自己的Panel中,这会暴露DefaultButton属性。

答案 1 :(得分:2)

如果你使用jQuery,你可以使用jQuery做一个很好的简单路由。

简单地执行以下操作可能会很有效:

<script language="javascript" type="text/javascript">
  jQuery(function(){    
     jQuery('input').keydown(function(e){
      if (e.keyCode == 13) {
        jQuery(this).next().trigger('click');
        return false;
      }
    });
  });
</script>

然后代码端你会触发相关的事件处理程序,或者只是通过查询发件人对象id来查看单击了哪个按钮

相关问题