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 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
Extjs学习笔记之四 工具栏和菜单
Jan 07 Javascript
基于jquery的仿百度搜索框效果代码
Apr 11 Javascript
JavaScript EasyPager 分页函数
May 25 Javascript
怎么判断js脚本加载完成
Feb 28 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
Angular实现下拉框模糊查询功能示例
Jan 03 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
js html实现计算器功能
Nov 13 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 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+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python binascii 进制转换实例
2019/06/12 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python3 元组tuple入门基础
2020/02/09 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
测绘工程专业个人自我评价
2013/12/01 职场文书
档案室主任岗位职责
2014/02/12 职场文书
农村改厕实施方案
2014/03/22 职场文书
大学英语专业求职信
2014/06/21 职场文书
河童之夏观后感
2015/06/11 职场文书
初级职称评定工作总结
2015/08/13 职场文书