我有一个 ASP.NET Webforms 页面,其中包含多个默认按钮。在除 Google Chrome 之外的所有浏览器中,它们都按预期运行,但在 Chrome 中会触发错误的默认按钮。
我已经阅读了这个问题的一些常见原因,例如。无效的 HTML(将 Panel 放在 TABLE 元素中),但事实并非如此。
我在 stackoverflow 上看到了一个类似的问题,但没有一个公认的答案。
这个问题有什么解决办法吗?
更新:
我继续阅读 MSDN LinkButtons 不适合设置为默认按钮。
“仅支持 Button 和 ImageButton 控件。”
我想这一定是问题所在。
最佳答案
我从未亲身经历过这种行为。 DefaultButton 属性在 Chrome 中一直对我有用,但是如果你不能真正解决它,有一种方法可以解决它。您可以将简短的 JavaScript 注入(inject)您想要触发按钮的控件中。这是一个非 jQuery 方法:
StringBuilder script = New StringBuilder("");
script.Append("if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {");
script.Append("document.getElementById('" + Me.btnToFire.ClientID);
script.Append("').click();return false;}} else {return true};");
this.txtControlToAttach.Attributes.Add("onkeydown", script.ToString());
这是一个 jQuery 解决方案,可用于在同一 block 中分配多个(未经测试,因此可能需要调整)。
function fireButtonClick(ctrl, event) {
if(event.which || event.keyCode){
if ((event.which == 13) || (event.keyCode == 13)) {
ctrl.click();
return false;
}
}
else {
return true;
}
}
$(document).ready(function() {
$("#<%=this.ControlToAttach.ClientID%>").keypress(function(event) {
fireButtonClick($("#<%=this.btnToFire.ClientID%>"), event);
});
$("#<%=this.ControlToAttach2.ClientID%>").keypress(function(event) {
fireButtonClick($("#<%=this.btnToFire2.ClientID%>"), event);
});
// Just keep adding controls here
});
关于存在多个默认值时,ASP.NET 默认按钮 (LinkButton) 在 Google Chrome 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8135454/