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 ajax获取网站Alexa排名的代码
Dec 12 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
Dec 13 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
JS实现图片拖拽交换效果
Nov 30 Javascript
layui使用form表单实现post请求页面跳转的方法
Sep 14 Javascript
layui数据表格 table.render 报错的解决方法
Sep 29 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 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 XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php生成扇形比例图实例
2013/11/06 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
用jscript实现新建word文档
2007/06/15 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
Python入门篇之条件、循环
2014/10/17 Python
Python中属性和描述符的正确使用
2016/08/23 Python
Python通过future处理并发问题
2017/10/17 Python
Python numpy 点数组去重的实例
2018/04/18 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
长青弘远的面试题
2012/06/09 面试题
离职证明标准格式
2014/09/15 职场文书
博士论文答辩开场白
2015/06/01 职场文书
员工旷工检讨书
2015/08/15 职场文书
医学会议开幕词
2016/03/03 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
2019入党申请书格式
2019/06/25 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书