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 相关文章推荐
web基于浏览器的本地存储方法应用
Nov 27 Javascript
JS实现匀速运动的代码实例
Nov 29 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
Jun 20 Javascript
JS合并数组的几种方法及优劣比较
Sep 19 Javascript
Jquery实现鼠标移动放大图片功能实例
Mar 25 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
基于better-scroll 实现歌词联动功能的代码
May 07 Javascript
canvas 中如何实现物体的框选
Aug 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
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
php中如何执行linux命令详解
2018/11/06 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
js option删除代码集合
2008/11/12 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python 调用Java实例详解
2017/06/02 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
python获取Pandas列名的几种方法
2019/08/07 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
园长自我鉴定
2013/10/06 职场文书
高中打架检讨书
2014/02/13 职场文书
门前三包责任书
2014/04/15 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书