У меня есть форма поиска, состоящая из следующих ...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 ниже.
Добавить пользовательский атрибут
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>
Запустить следующий 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); }); });
Спасибо! Я отредактировал свой ответ выше, чтобы включить многоразовое решение на основе вашей техники. – Bumpy