我有一个ASP.NET Webforms页面,其中包含多个默认按钮。在所有浏览器中,除了Google Chrome之外,它们按预期运行,但在Chrome中,错误的默认按钮会触发。
我已经阅读了这个问题的一些常见原因,例如。无效的HTML(将Panel放在TABLE元素中)但情况并非如此。
我在stackoverflow上看到了一个类似的问题,但没有接受答案。
这个问题有解决办法吗?
更新
我在MSDN上读到LinkButtons不适合设置为默认按钮。
“仅支持Button和ImageButton控件。”
我想这肯定是问题。
答案 0 :(得分:0)
我个人从未经历过这种行为。 DefaultButton属性在Chrome中一直对我有用,但是如果你真的无法解决它,那么就有办法解决它。您可以将短JavaScript注入要为其触发按钮的控件。这是一个非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解决方案,可用于在同一个块中分配多个(未经测试,因此可能需要调整)。
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
});
答案 1 :(得分:0)
我在MSDN上读到LinkButtons不适合设置为默认按钮。
“仅支持Button和ImageButton控件。”