2013-05-20 53 views
1

我有由以下的搜索表單...ASP .NET - 提交關於輸入 - 防止「defaultbutton」當其他按鈕具有焦點

<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:panelDefaultButton屬性)

的問題是,當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. 在pageload上運行以下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); 
        }); 
    
    }); 
    

回答

0

看到面板生成html

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

所以,當btnReset的onfocus我們打破面板的onkeypress事件時,下面添加到btnReset, 記得btnReset的onblur,改變面板按鍵來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" .../> 
+0

謝謝!我已經編輯了上面的答案,以包含基於您的技術的可重用解決方案。 – Bumpy