2013-05-20 4 views
1

У меня есть форма поиска, состоящая из следующих ...ASP .NET - Подайте на Enter - Prevent «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 (который работает благодаря атрибуту DefaultButton в asp:panel)

проблема заключается в том, что, когда 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 на pageload.

    $("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

0

вам нужно изменить DefaultButton атрибут панели, но это будет работать только один, в то время, лучше всего было бы иметь Javascript для захвата ввести событие и процесс соответственно.

Одним из способов может быть наличие нескольких панелей, посмотрите на http://www.jstawski.com/archive/2008/09/23/multiple-default-buttons.aspx

 Смежные вопросы

  • Нет связанных вопросов^_^