我有一个包含以下内容的搜索表单...
<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。
$("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); }); });