asp.Netページフォーム内のテキスト入力ボックスEnter応答をキャンセルする方法

5942 ワード

本文の例はaspを述べた.Netページフォーム内のテキスト入力ボックスEnter応答をキャンセルする方法を実現します.皆さんの参考にしてください.具体的には以下の通りです.
ずっと前にaspを開発した.Netプロジェクトの時に出会った:1つのサーバーTextBoxコントロールでEnterキーを押して、ページを再送してリフレッシュします.その後googleはこれがaspであることに気づいた.net2.0フォーム処理に特化した「Enter key」機能、aspについて.Netajaxフォームのenter keyでは、この「ASP.NET AjaxベースのEnterキーコミット問題」を参照できます.前に示したリンクの2つは、enter keyのデフォルトトリガイベントをどのように設定するかということです.新しいニーズがあります.入力者は入力時にenterキーを押してフォームを提出しません(考えてみれば合理的ですが、フォームに入力ボックスが多い場合、enterキーを押してページを何回返送しますか?)サーバ側コミットボタンを直接クリックしない限り.簡単に言えば、フォーム要素を削除するenter key機能です.次は私の実現です.
一、初歩的な分析と実現:
1、ページはベースクラスBasePageを継承し、ベースクラスはPageクラスから継承し、ベースクラスに特定のサーバーコントロールのonkeydownスクリプトイベントを登録する

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class BasePage : System.Web.UI.Page
{
 public BasePage()
 {
 }
 protected override void OnInit(EventArgs e)
 {
  base.OnInit(e);
  CancelFormControlEnterKey(this.Page.Form.Controls);
 }
 /// 
 ///       Form            onkeydown    ,         enter     
 /// 
 /// 
 public static void CancelFormControlEnterKey(ControlCollection controls)
 {
  foreach (Control item in controls)
  {
   //   TextBox
   if (item.GetType() == typeof(System.Web.UI.WebControls.TextBox))
   {
    WebControl webControl = item as WebControl;
    webControl.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}} ");
   }
   //html  
   else if (item.GetType() == typeof(System.Web.UI.HtmlControls.HtmlInputText))
   {
    HtmlInputControl htmlControl = item as HtmlInputControl;
    htmlControl.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}} ");
   }
   //    
   else if (item is System.Web.UI.UserControl)
   {
    CancelFormControlEnterKey(item.Controls); //    
   }
  }
 }
}


このように「enter key」機能をキャンセルしたいページはBasePageクラスを継承するだけでよい.
2、ユーザーコントロールの処理:私の考え方はベースクラスの中でユーザーコントロール内部のrunat=serverのコントロールを処理し続け、テストも合格した.
3、ページとユーザーコントロールのrunat=serverラベルのないhtmlコントロールは、これらのhtmlコントロールにonkeydownイベントを直接追加します.
次に、テストページと対応するクラスファイルを示します.
Test.aspxページ:






 


 </code></pre><form id="form1" runat="server">
<input type="text" id="txtTest" runat="server"/> <input id="txtTest1" type="text" name="txtTest1" onkeydown="if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}}"/> 
<textbox id="Textbox1" runat="server"/>
 <testusercontrol id="TestUserControl1" runat="server"/>
<button id="btnSubmit" runat="server" text="Submit"/>
 </form>



 
 </div> 
 <p> :</p> 
 <div class="jb51code"> 
  <pre><code>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Test : BasePage
{
 protected void Page_Load(object sender, EventArgs e)
 {
  Response.Write("123");
 }
}

</code></pre> 
 </div> 
 <p>         :</p> 
 <div class="jb51code"> 
  <pre><code>

<textbox id="TextBox1" runat="server"/>
<br/>
<input id="Text1" type="text" runat="server"/>
<br/>
<input id="txtInput" type="text" name="txtInput" onkeydown="if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}}"/>

</code></pre> 
 </div> 
 <p>       , TextBox,HtmlInputText   runat=server   html                       enter            。</p> 
 <p><strong> 、          </strong></p> 
 <p>     if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}}        ,            JavaScript   forbidInputKeyDown(ev):</p> 
 <div class="jb51code"> 
  <pre><code>
<script type="text/javascript">
 function forbidInputKeyDown(ev) {
  if (typeof (ev) != "undefined") {
   if (ev.keyCode || ev.which) {
    if (ev.keyCode == 13 || ev.which == 13) { return false; }
   }
  }
 }
</script>

</code></pre> 
 </div> 
 <p>  onkeydown          “forbidInputKeyDown(event)”(            TextBox                  webControl.Attributes.Add("onkeydown", "forbidInputKeyDown(event)");),    ,   ,      ?!       ,forbidInputKeyDown      ,  form      。</p> 
 <p>          ,   head   body ,    。           ?  ,    。        ?    ,       。       ? ......</p> 
 <p> kao,    ,          :onkeydown="return forbidInputKeyDown(event)",   forbidInputKeyDown      return   ,     ,� �</p> 
 <p>         asp.net#        。</p> 
 <div class="clearfix"> 
  <span id="art_bot" class="jbTestPos"/> 
 </div> 
</div>
                            </div>
                        </div>