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 hashtable实现代码
Oct 13 Javascript
js控制的回到页面顶端goTop的代码实现
Mar 20 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
Nov 28 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
vue项目中引入noVNC远程桌面的方法
Mar 05 Javascript
使用JavaScript中的lodash编写双色球效果
Jun 24 Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
vue.js的提示组件
2017/03/02 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
js module大战
2019/04/19 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
Python中使用PDB库调试程序
2015/04/05 Python
Python安装第三方库的3种方法
2015/06/21 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
教育技术职业规划范文
2014/03/04 职场文书
感恩节活动策划方案
2014/05/16 职场文书
2014年学生工作总结
2014/11/20 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
农村婚庆主持词
2015/06/29 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
人力资源部工作计划
2019/05/14 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫