由于asp.net里面的button都是submit类型的,所以在表单内按回车都是触发的第一个按钮的click事件,如果有多个button则无法在回车的时候触发后面的按钮事件。以下方案可通过设置来改变页面的默认按钮。
1.在基页面内的load事件里加入supportDefaultButton()
2.基页面中声明变量:
Protected DefaultButton As Button
3.在基页面中加入函数supportDefaultButton并重载RaisePostBackEvent
Private Sub supportDefaultButton()Sub supportDefaultButton()
GetPostBackEventReference(New System.Web.UI.Control)
RegisterStartupScript("DefaultButton", "")
End Sub
Protected Overloads Overrides Sub RaisePostBackEvent()Sub RaisePostBackEvent(ByVal sourceControl As System.Web.UI.IPostBackEventHandler, ByVal eventArgument As String)
If (DefaultButton Is Nothing OrElse Request("__EVENTTARGET") <> "") Then
MyBase.RaisePostBackEvent(sourceControl, eventArgument)
ElseIf (Not DefaultButton Is Nothing) Then
MyBase.RaisePostBackEvent(DirectCast(DefaultButton, System.Web.UI.IPostBackEventHandler), Nothing)
End If
End Sub
4.DefaultButton.js文件内容:
for(i=0;i{
if(Form1.elements[i].type == "submit")
{
fstsubmit = Form1.elements[i]
fstsubmit.attachEvent("onmouseup", changeEvent)
//break; 这一句应该去掉
}
}
function changeEvent()
{
__doPostBack(event.srcElement.id, '')
}
在继承页面的load事件里:
5.DefaultButton = 需要设置为默认按钮的对象名称
即可。
IE6里面测试通过,低版本没有测试,但应该没问题。有兴趣的朋友可以帮忙测试一下兼容性,顺便告知。要是有更好的办法,也请给个链接看看。
Feedback
#1楼 回复 引用 查看
2004-11-22 22:22 by 柚子Nan
asp.net中确实有这个问题,非常的烦人,特别是页面上有很多文本框都绑定了回车事件以后,如果哪个文本框没有绑定就触发默认的按钮!
不过,从另外一个思路来看,找到默认按钮以后,把你的页面的所有验证逻辑都写到里面,这样不管在哪里敲回车都会去验证,你觉得呢?
个方法不错,只是怎么觉得前台的脚本不加也可阿
把我解决方案给大家看看
///
/// 设置在页面回车时触发事件的控件
///
/// 将触发事件的控件对象
public static void SetEnterControl(System.Web.UI.Control Ctrl)
{
Page mPage = Ctrl.Page;
string mScript;
mScript = @"";
if(!mPage.IsClientScriptBlockRegistered("SetEnterControl"))
mPage.RegisterClientScriptBlock("SetEnterControl",mScript);
}
本文作者:squirrel_sc 来源:http://www.cnblogs.com/squirrel_sc/
CIO之家 www.ciozj.com 微信公众号:imciow