我有一个由以下内容组成的搜索表单......
<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>
在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 :(得分:0)
您需要更改面板的DefaultButton
属性,但这一次只适用于一个,更好的方法是让Javascript捕获输入事件并相应地处理。
一种方法可以是多个面板,看看http://www.jstawski.com/archive/2008/09/23/multiple-default-buttons.aspx
答案 1 :(得分:0)
见面板生成html
<div id="yourPanelClientID" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'btnSearch')">
所以,当btnReset onfocus我们打破了Panel的onkeypress事件时,在下面添加到btnReset, 记得当btnReset onblur时,将Panel keypress更改为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" .../>