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实现的WEB页面跳转以及页面间传值方法
May 13 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
Feb 16 Javascript
如何将网页表格内容导入excel
Feb 18 Javascript
基于jQuery实现动态数字展示效果
Aug 12 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
JS跨域请求外部服务器的资源
Feb 06 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
微信小程序 冒泡事件原理解析
Sep 27 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
PHP 彩色文字实现代码
2009/06/29 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
Exjs 入门篇
2010/04/07 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
js脚本实现数据去重
2014/11/27 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
微信小程序如何获取手机验证码
2018/11/04 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
Python pickle模块用法实例
2015/04/14 Python
Python实现自动上京东抢手机
2018/02/06 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
平安工地汇报材料
2014/08/19 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL