【发布时间】: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 在下面接受的答案采用的可重复使用的解决方案。
-
向面板添加自定义属性
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); }); });
【问题讨论】:
标签: asp.net .net enter defaultbutton