【问题标题】:ASP .NET - Submit on Enter - Prevent 'defaultbutton' when other button has focusASP .NET - 输入时提交 - 当其他按钮具有焦点时防止“默认按钮”
【发布时间】:2013-05-14 13:55:40
【问题描述】:

我有一个包含以下内容的搜索表单...

<asp:Panel DefaultButton="btnSearch" ... >

    [...search criteria fields...]

    <asp:Button ID="btnReset" OnClick="btnReset_Click" ... />
    <asp:Button ID="btnSearch" OnClick="btnSearch_Click" ... />

</asp:Panel>

期望的行为是按下Enter 键应该调用btnSearch_Click(这要归功于asp:panel 中的DefaultButton 属性)

问题是当btnReset 获得焦点时,按下Enter 应该调用btnReset_Click(它没有——它总是btnSearch)。

这很容易以某种方式实现,还是我必须破解一些定制的 JS 来拦截 .NET 的 defaultButton 事件处理程序?

提前致谢。


ETA:这是我根据 HenryChuang 在下面接受的答案采用的可重复使用的解决方案。

  1. 向面板添加自定义属性preventDefaultButton

    <asp:Panel DefaultButton="btnSearch" preventDefaultButton="btnReset" >
    
        [...search criteria fields...]
    
        <asp:Button ID="btnReset" OnClick="btnReset_Click" ... />        
        <asp:Button ID="btnSearch" OnClick="btnSearch_Click" ... />
    
    </asp:Panel>
    
  2. 在页面加载时运行以下 jQuery。

    $("div[preventDefaultButton]").each(function () {
    
        var div = $(this);
        var keypressEvent = div.attr("onkeypress");
        var btn = $("input[id$=" + div.attr("preventDefaultButton") + "]");
    
        btn.on("focus", { div: div }, function (event) {
            event.data.div.attr("onkeypress", "");
        });
    
        btn.on("blur", { div: div, keypressEvent: keypressEvent }, function (event) {
            event.data.div.attr("onkeypress", event.data.keypressEvent);
        });
    
    });
    

【问题讨论】:

    标签: asp.net .net enter defaultbutton


    【解决方案1】:

    查看面板生成html

    <div id="yourPanelClientID" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'btnSearch')">
    

    所以,当 btnReset onfocus 我们打破 Panel 的 onkeypress 事件时,在 btnReset 中添加以下内容, 记得当 btnReset onblur 时,将 Panel keypress 更改为 oringinal

    onfocus="document.getElementById('yourPanelClientID').onkeypress = '';"
    onblur="funA();"
    function funA() {
            document.getElementById('yourPanelClientID').onkeypress = function () { return WebForm_FireDefaultButton(event, "btnSearch") };
        }
    

    喜欢这个

     <asp:Button ID="btnReset"
     onfocus="document.getElementById('yourPanelClientID').onkeypress = '';" 
    onblur="funA();"
    onclick="btnReset_Click" .../>
    

    【讨论】:

    • 谢谢!我已经根据您的技术编辑了上面的答案,以包含一个可重复使用的解决方案。
    【解决方案2】:

    您需要更改面板的 DefaultButton 属性,但这一次只能用于一个,更好的方法是让 Javascript 捕获输入事件并相应地进行处理。

    一种方法可以有多个面板,看看http://www.jstawski.com/archive/2008/09/23/multiple-default-buttons.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      相关资源
      最近更新 更多