041217對DefaultButton.js做了一點必要的更改。
由於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", "<script language='javascript' src='/js/DefaultButton.js'></script>")
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<Form1.elements.length;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裡面測試通過,低版本沒有測試,但應該沒問題。有興趣的朋友可以幫忙測試一下相容性,順便告知。要是有更好的辦法,也請給個連結看看。