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 相关文章推荐
jQuery的运行机制和设计理念分析
Apr 05 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
Apr 21 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 Javascript
原生js实现jquery函数animate()动画效果的简单实例
Aug 21 Javascript
Javascript typeof与instanceof的区别
Oct 18 Javascript
jQuery Easyui datagrid连续发送两次请求问题
Dec 13 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
Dec 30 Javascript
Express之get,pos请求参数的获取
May 02 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
node.js中使用Export和Import的方法
Sep 18 Javascript
通过js动态创建标签,并设置属性方法
Feb 24 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 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中“简单工厂模式”实例代码讲解
2012/09/04 PHP
php对数组排序代码分享
2014/02/24 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
python实现电脑自动关机
2018/06/20 Python
python实现彩色图转换成灰度图
2019/01/15 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
计算机专业求职信
2014/06/02 职场文书
武当山导游词
2015/02/03 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js