Asp.net 回车键代替按钮事件

从网上收集了一些资源总结一下,实践总结

 

3种方法:

 

第一种

    protected void Page_Load(object sender, EventArgs e)

    {

        //Page.Form.DefaultButton = "ASPxbtnCommit";

 

        SetEnterControl(ASPxbtnCommit);

    }

 

    public static void SetEnterControl(System.Web.UI.Control Ctrl) //设置页面的默认按钮

    { 

       Page mPage = Ctrl.Page; 

       string mScript; 

       mScript = @"<script language=""javascript""> 

        function document.onkeydown() 

        { 

        var e = event.srcElement; 

        var k = event.keyCode; 

        if (k == 13) //13代表回车键

        { 

        document.all." + Ctrl.ClientID + @".click(); 

        event.cancelBubble = true; 

        event.returnValue = false; 

        } 

        } 

        </script>"; 

       if(!mPage.IsClientScriptBlockRegistered("SetEnterControl")) {

        mPage.RegisterClientScriptBlock("SetEnterControl",mScript); 

      }

    }

 

Page.Form.DefaultButton = "ASPxbtnCommit"; 这种方法经过测试不行

 

 

第2种

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class btnEnter2 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        this.TextBox2.Attributes.Add("onkeydown", "if(event.keyCode==13) {document.all." + this.Button2.ClientID + ".focus();document.all." + this.Button2.ClientID + ".click();}");

 

        TextBox3.Attributes.Add("onkeydown", "if(event.keyCode==13) {document.all." + this.Button3.ClientID + ".focus();document.all." + this.Button3.ClientID + ".click();}");

 

        this.TextBox4.Attributes.Add("onkeydown", "if(event.keyCode==13) {document.all." + this.Button4.ClientID + ".focus();document.all." + this.Button4.ClientID + ".click();}"); 

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        TextBox1.Text = "你激活了按钮1";

    }

    protected void Button2_Click(object sender, EventArgs e)

    {

        TextBox2.Text = "你激活了按钮2";

    }

    protected void Button3_Click(object sender, EventArgs e)

    {

        TextBox3.Text = "你激活了按钮3";

 

    }

    protected void Button4_Click(object sender, EventArgs e)

    {

        TextBox4.Text = "你激活了按钮4";

 

    }

}

第3种
第一步,先编写简单的页面代码,这里我们只需要一个按钮就足够了。当然,还有按钮事件。
<html>
<head>
<title>测试绑定enter</title>
<script type="text/javascript">
function b_onclick()
{
    alert("你好!");
}
</script>
</head>
<body>
<input type="button" value="测试按钮" id="test" οnclick="b_onclick()" />
</body>
</html>
第二步,于b_onclick()函数加入如下js代码:
        function document.onkeydown()
            {
                //使用document.getElementById获取到按钮对象
                var button = document.getElementById("test");
                if(event.keyCode == 13)
                    {
                        button.click();
                        event.returnValue = false;
                    }
            }
然后于IE中运行,你会发现,即使焦点不在按钮上,当你按下回车,依然执行了按钮的函数。
稍微解释一下代码:
    event.keyCode == 13是判断按下的是那一个间,13代表的是回车键。
    button.click();执行按钮事件。
    event.returnValue = false;这个是为了防止浏览器捕捉到用户按下回车键而进行其他操作。例如假如输入框中,没有这行代码的话,在执行完按钮事件后,其还会执行换行的动作。
第三步,很多人都认为做完上面的工作已经完成了整个作业。其实不是的。你尝试使用firefox浏览,就会发现,代码并不会执行。显然,这是因为firefox不支持event事件对象。为了做到跨浏览器,不得不将代码进行优化。
我们可以这个做:
首先,为boby添加一个onkeydown监控函数,如<body οnkeydοwn="BindEnter(event)">。
其次修改原来的绑定函数为:
function BindEnter(obj)
{
    //使用document.getElementById获取到按钮对象
    var button = document.getElementById('test');
    if(obj.keyCode == 13)
        {
            button.click();
            obj.returnValue = false;
        }
}
为什么要将事件对象作为参数传递呢?这是为了避免进行浏览器判别,节省代码。
OK,到这里已经基本完成了。完整代码如下:
<html>
<head>
<title>测试绑定enter</title>
<script type="text/javascript">
function b_onclick()
{
    alert("你好!");
}
function BindEnter(obj)
{
    //使用document.getElementById获取到按钮对象
    var button = document.getElementById('test');
    if(obj.keyCode == 13)
        {
            button.click();
            obj.returnValue = false;
        }
}
</script>
</head>
<body οnkeydοwn="BindEnter(event)">
<input type="button" value="测试按钮" id="test" οnclick="b_onclick()" />
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值