js触发asp.net的Button的Onclick事件

简介: 在asp.net引入事件驱动之后,在一个页面上很容易解决多个按钮触发不同事件的问题,避免了在asp中需要多个form或者通过js脚本来控制 的麻烦。 asp.net带来便利的同时,也带来一个问题。在实际应用中一个页面存在多个按钮的情况并不多。

在asp.net引入事件驱动之后,在一个页面上很容易解决多个按钮触发不同事件的问题,避免了在asp中需要多个form或者通过js脚本来控制 的麻烦。

asp.net带来便利的同时,也带来一个问题。在实际应用中一个页面存在多个按钮的情况并不多。用户习惯于在输入框输入内容之后,直接按回车就提 交表单了。由于asp.net采用的是事件驱动模式,所以默认用户按回车并没有触发按钮的onclick事件。用户按回车也不是没有提交表单,通过httpwath可以看到,实际上页面表单是提交到了form下的action页 面,只不过没有触发onclick事件而已。

在asp.net事件驱动模式下面,要实现通过回车来触发事件,必须要借助js脚本来实现。

在asp.net的aspx页面中,form的代码:

<form id="form1" runat="server">

 

但在访问页面的源代码中可以看到:

<form name="form1" method="post" action="Default.aspx" id="form1">

 

所以在输入框默认直接按回车,其实就是把表单提交到了form的action对应的页面,而并没有触 发任何事件。

奇怪的地方:当一个aspx页面上没 有使用web控件的时候,在输入框里按回车,默认是不会触发任何一个button按钮的onclick事件;但当页面上 有使用web控件的时候,在输入框里按回车,默认会触发第一个button的onclick事件。

【这里的第一指页面代码 中最先出现的button控件,包括web控件内的button控件】

下面说说如何通过js来触发button按钮的onclick事件。

默认的button控件,在html中的代码是这样的:

<input type="submit" name="Button1" value="Button" id="Button1" />

 

实际 上点击这个button触发的onclick事件调用了一个js脚本:__doPostBack(eventTarget, eventArgument)

button 控件有个属性:UseSubmitBehavior,默认是true,当你修改为false的时候,再去看html的源代码,就能清楚的看到调用的js脚 本函数。

<input type="button" name="Button1" value="Button" onclick="javascript:__doPostBack('Button1','')"id="Button1" />

 

生成的js脚本:

<script type="text/javascript"> 
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

 

 

了解了这块内容,要处理输入框按回车触发button的onclick事件就简单的多了,就是截获输入框按回车的这个动 作,然后通过js调用__doPostBack这个函数就OK了

输入框:

<input name="TextBox1" type="text" id="TextBox1" onkeydown="return KeyDown('Button1');" />
<input type="submit" name="Button1" value="Button" id="Button1" />

 

js脚本
       

 function KeyDown(btn) {
            if (event.keyCode != 13) //按键不是enter键
          {
                return;
            }
            else //按键是enter键
            {
                try {
                    __doPostBack(btn, '');
                    return false;
                }
                catch (e) {
                    alert(e);
                    return;
                }
            }
        }

 

如果要输入框和button控件是在web控件里的,就需要特别注意:
控件中的button控件生成的html代码:

<input type="submit" name="WUC11$Button2" value="Button" id="WUC11_Button2" />

__doPostBack中用到的是input按钮的name属性,web控件中button,在生成的html代码里会加上控件的ID,所以传递的 button名称不要写错了。

 

这是我测试的时候用到的代码:

 $(function () {
            $("#txtVerificationCode").keydown(function (e) {
                var kCode = e.keyCode || e.charCode;
                if (kCode == 13) {
                    try {
                        window.__doPostBack('btnLogin', '');
                        return false;
                    }
                    catch (e) {
                        alert(e);
                        return false;
                    }
                }
            });
        });

 

目录
相关文章
|
JavaScript
js点击button,在页面上创建一个三行四列的表格
js点击button,在页面上创建一个三行四列的表格
414 0
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
362 8
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
630 0
|
应用服务中间件 nginx
Angular打包构建项目服务器运行runtime.js、polyfills.js、vendor.js报错net::ERR_ABORTED 404 (Not Found),build修改为相对路径./
Angular打包构建项目服务器运行runtime.js、polyfills.js、vendor.js报错net::ERR_ABORTED 404 (Not Found),build修改为相对路径./
|
JavaScript C#
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
799 0
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
730 0
|
JavaScript 前端开发 API
Vue报错:sockjs.js?9be2:1627 GET http://192.168.43.88:8080/sockjs-node/info?t=1631603986586 net::ERR_CO
Vue报错:sockjs.js?9be2:1627 GET http://192.168.43.88:8080/sockjs-node/info?t=1631603986586 net::ERR_CO
|
JavaScript Java
十、.net core(.NET 6)搭建ElasticSearch(ES)系列之Java环境搭建和Node.js环境搭建
安装java jdk环境:我此处使用的是jdk16版本。下载地址:https://www.oracle.com/java/technologies/javase-jdk16-downloads.html然后运行,直接默认都是下一步进行安装:
353 0
十、.net core(.NET 6)搭建ElasticSearch(ES)系列之Java环境搭建和Node.js环境搭建
|
JavaScript 前端开发
🎖️JavaScript 中 onclick 和 addEventListener 的区别
onclick是一个 HTML 属性,用于在用户单击特定元素(如按钮或链接)时执行附加的 JavaScript 代码。而 addEventListener 是 JavaScript 中的一种方法,允许开发人员动态地将事件处理程序附加到 HTML 元素上。
676 0