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 短路法代码精简
Aug 20 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
Jan 11 Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
js判断浏览器类型的方法
Aug 07 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
JavaScript中数组的各种操作的总结(必看篇)
Feb 13 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
May 28 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
Node.js Windows Binary二进制文件安装方法
May 16 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
详解react组件通讯方式(多种)
May 06 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
标准PHP的AES加密算法类
2015/03/12 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
javascript匿名函数实例分析
2014/11/18 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
vue cli 全面解析
2018/02/28 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Swift中的协议(protocol)学习教程
2016/07/08 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python中Unittest框架的具体使用
2019/08/27 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
高中自我评价范文
2014/01/27 职场文书
村党支部换届选举方案
2014/05/02 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
Nginx限流和黑名单配置
2022/05/20 Servers