Asp.net回车默认按钮事件解决方案

一、 Js 设置默认按钮

        function document.onkeydown()

        {

            var e=event .srcElement;

            if (event .keyCode==13)

            {

                document.getElementById("btnSearch" ).focus();

                return true ;

            }

}

二、 Form 标签中设置 defaultbutton 属性

  < form id ="form1" runat ="server" defaultbutton =" 默认按钮 ID">

三、 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, '' )

      }

四、 控件方法

自己写一个控件继承 TextBox ,增加一个 SubmitControl 属性用来指定此文本框上按回车时由哪个按钮来响应。再做一个 Converter 增加设计时支持,就是在设计时可以用下拉框选择提交按钮。 目前只考虑了buttonLinkButtonImageButton 作为提交按钮,当然继承它们的控件也可以。

ufoTextBox 控件:

public class ufoTextBox : TextBox

        {

            [TypeConverter(typeof (SubmitableControlConvertor)), DefaultValue("" ), Category("Behavior" )]

            public string SubmitControl

            {

                get

                 {

                    object ret = this .ViewState["SubmitControl" ];

                    if (ret != null )

                    {

                        return (string )ret;

                    }

                    return string .Empty;

                }

                set

                {

                    this .ViewState["SubmitControl" ] = value ;

                }

            }

                  protected override void AddAttributesToRender(HtmlTextWriter writer)

            {

                base .AddAttributesToRender(writer);

                if (this .SubmitControl.Length > 0)

                {

                    Control con = FindControl(SubmitControl);

                    if (con != null )

                    {

                        string script = "if(event.keyCode == 13){document.getElementById('" + con.ClientID + "').click();event.returnValue=false;}" ;

                        writer.AddAttribute("onkeydown" , script);

                    }

                }

 

            }

}

 

 

 

SubmitableControlConvertor

public class SubmitableControlConvertor : StringConverter

    {

        private object [] GetControls(IContainer container)

        {

            ComponentCollection components = container.Components;

            ArrayList ret = new ArrayList ();

            foreach (IComponent control in components)

            {

                if (!(control is Button || control is LinkButton || control is ImageButton ))

                {

                    continue ;

                }

                Control button = (Control )control;

                if ((button.ID != null ) && (button.ID.Length != 0))

                {

                    ret.Add(string .Copy(button.ID));

                }

            }

            ret.Sort(Comparer .Default);

            return ret.ToArray();

        }

        public override System.ComponentModel.TypeConverter .StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

        {

            if ((context != null ) && (context.Container != null ))

            {

                object [] controls = this .GetControls(context.Container);

                if (controls != null )

                {

                    return new TypeConverter .StandardValuesCollection (controls);

                }

            }

            return null ;

        }

        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)

        {

            return false ;

        }

        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

        {

            return true ;

        }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值