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


Posted in Javascript onFebruary 02, 2013

在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名称不要写错了。
Javascript 相关文章推荐
javascript instanceof 与typeof使用说明
Jan 11 Javascript
jQuery创建插件的代码分析
Apr 14 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
Aug 07 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
vue项目国际化vue-i18n的安装使用教程
Mar 14 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
Feb 16 Javascript
js之ajax文件上传
May 13 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
Feb 02 #Javascript
js中eval()函数和trim()去掉字符串左右空格应用
Feb 02 #Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
Feb 01 #Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 #Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 #Javascript
js自定义事件及事件交互原理概述(一)
Feb 01 #Javascript
js解析与序列化json数据(三)json的解析探讨
Feb 01 #Javascript
You might like
用 JSON 处理缓存
2007/04/27 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
Vue的生命周期操作示例
2019/09/17 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python单例模式的两种实现方法
2017/08/14 Python
python实现单向链表详解
2018/02/08 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python求绝对值的三种方法小结
2019/12/04 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
销售自荐信
2013/10/22 职场文书
通信研究生自荐信
2014/02/01 职场文书
离婚协议书范本样本
2014/08/19 职场文书
推普周活动总结
2014/08/28 职场文书
学生检讨书范文
2014/10/30 职场文书
婚前保证书范文
2015/02/28 职场文书
2015年药房工作总结
2015/04/25 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
诚信高考倡议书
2019/06/24 职场文书