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 表单中textarea字数限制实现代码
Dec 07 Javascript
JQuery实现带排序功能的权限选择实例
May 18 Javascript
使用JavaScript实现连续滚动字幕效果的方法
Jul 07 Javascript
JavaScript判断对象是否为数组
Dec 22 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
Jan 21 Javascript
微信小程序组件 marquee实例详解
Jun 23 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 Javascript
Vue中的slot使用插槽分发内容的方法
Mar 01 Javascript
json前后端数据交互相关代码
Sep 19 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
移动端吸顶fixbar的解决方案详解
Jul 17 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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
PHP中的类型约束介绍
2015/05/11 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
JavaScript库 开发规则
2009/01/31 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
node.js获取参数的常用方法(总结)
2017/05/29 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
PyTorch实现AlexNet示例
2020/01/14 Python
如何教少儿学习Python编程
2020/07/10 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
安全生产管理责任书
2014/04/16 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
仓库管理制度范本
2015/08/04 职场文书
员工安全责任协议书
2016/03/22 职场文书
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL