天天看點

asp.net取消頁面表單内文本輸入框的Enter響應

一、初步分析和實作:

1、頁面繼承一個基類BasePage,基類繼承自Page類,在基類中注冊特定伺服器控件的onkeydown腳本事件

asp.net取消頁面表單内文本輸入框的Enter響應

Code

這樣,想取消“enter key”功能的頁面隻有繼承一下BasePage類即可。

2、使用者控件的處理:我的思路就是在基類中繼續處理使用者控件内部的runat=server的控件,測試也是通過的。

3、頁面中和使用者控件裡的沒有runat=server标簽的html控件,直接給這些html控件添加onkeydown事件。

下面是測試頁面和其對應的類檔案:

Test.aspx頁面:

asp.net取消頁面表單内文本輸入框的Enter響應

類:

asp.net取消頁面表單内文本輸入框的Enter響應

接着是一個使用者控件:

asp.net取消頁面表單内文本輸入框的Enter響應

在筆者的機器上,對TextBox,HtmlInputText和沒有runat=server标簽的html控件以及三者組合成的使用者控件按照上面的思路按下enter鍵運作效果果然沒有回發了。

二、腳本改進時碰到的問題

然後我看到if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}}這一句不斷地出現,就好心把它在頁面裡封裝成JavaScript函數叫forbidInputKeyDown(ev):

asp.net取消頁面表單内文本輸入框的Enter響應

然後onkeydown的方法對應的事件就是“forbidInputKeyDown(event)”(比如對于頁面中伺服器端的TextBox控件在注冊用戶端事件的時候就改寫成 webControl.Attributes.Add("onkeydown", "forbidInputKeyDown(event)");),奇怪的是,這一次,頁面又回發了?! 然後腳本調試,forbidInputKeyDown函數也執行了,可是form還是被送出了。

我又看了一下腳本位置,把它從head移動到body内,問題依舊。然後懷疑是不是腳本錯了?不對,腳本沒錯。難道是人品有問題?有問題嗎,這個自信真沒有。注冊事件錯了嗎?嗯......

我kao,恍然大悟,注冊事件應該這麼寫的:onkeydown="return forbidInputKeyDown(event)",也就是forbidInputKeyDown函數前面加上return就好了,還是人品啊,囧。

本文轉自JeffWong部落格園部落格,原文連結:本文轉自JeffWong部落格園部落格,原文連結:XXXXXXXX,如需轉載請自行聯系原作者,如需轉載請自行聯系原作者

繼續閱讀