A. jquery有什么作用
jquery的作用jQuery最初就是把javascript封装起来,方便调用。现在基于jQuery多了很多开源插件,如:easyUI是坐表格和布局的,Slideshow做电子相册的,你想做什么,直接把插件拿过来就用,非常方便。
当然,jQuery做前台是非常好的东西,如果你想和后台代码,如action一起用,还是需要一定功底的。
jquery-1.4.2.min.js文件有什么用途?不管是1.4.2还是jQuery以后的版本,都是用js封装的功能库,方便开发者使用。下面是就jQuery的具体作用:
1、取得页面中的元素。如果不使用JavaScript库,遍历DOM(DocumentObjectModel,文档对象模型)树,以及查找HTML文档结构中某个特殊的部分,必须编写很多行代码。jQuery为准确地获取需要检查或操纵的文档元素,提供了可靠而富有效率的选择符机制。
2、修改页面的外观。CSS虽然为影响文档呈现的方式提供了一种强大的手段,但当所有浏览器不完全支持相同的标准时,单纯使用CSS就会显得力不从心。jQuery可以弥补这一不足,它提供了跨浏览器的标准解决方案。而且,即使在页面已经呈现之后,jQuery仍然能够改变文档中某个部分的类或者个别的样式属性。
3、改变页面的内容。jQuery能够影响的范围并不局限于简单的外观变化,使用少量的代码,jQuery就能改变文档的内容。可以改变文本、插入或翻转图像、对列表重新排序,甚至,对HTML文档的整个结构都能重写和扩充——所有这些只需一个简单易用的API。
4、响应用户的页面操作。即使是最强大和最精心设计的行为,如果我们无法控制它何时发生,那它也毫无用处。jQuery提供了截取形形色色的页面事件(比如用户单击一个链接)的适当方式,而不需要使用事件处理程序搞乱HTML代码。此外,它的事件处理API也消除了经常困扰Web开发人员的浏览器不一致性。
5、为页面添加动态效果。为了实现某种交互式行为,设计者也必须向用户提供视觉上的反馈。jQuery中内置的一批淡入、擦除之类的效果,以及制作新效果的工具包,为此提供了便利。
6、无需刷新页面即可从服务器获取信息。这种编程模式就是众所周知的AJAX(AsynchronousJavaScriptandXML,异步JavaScript和XML),它能辅助Web开发人员创建出反应灵敏、功能丰富的网站。jQuery通过消除这一过程中的浏览器特定的复杂性,使开发人员得以专注于服务器端的功能设计。
jquery是什么在网站中有什么作用网络:
????Jquery是继prototype之后又一个优秀的Javascript框架。它是轻量级的js库,它兼容CSS3,还兼容各种浏览器(IE6.0+,FF1.5+,Safari2.0+,Opera9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。
维基网络:
????jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作。[1]由JohnResig在2006年1月的BarCampNYC上发布第一个版本。目前是由DaveMethvin领导的开发团队进行开发。全球前10000个访问最高的网站中,有65%使用了jQuery,是目前最受欢迎的JavaScript库[2][3]。
自己语言:jquery是javascript库,js其实是有很多原生对象以及方法组成,而jquery其实就相当于对方法和对象的另一封装,使得受众群体能够更快更方便的书写一些方法,和对html里面dom对象的操作;
jquery-1.4.2.min.js文件有什么用途?里面的代码都有什么用途?jquery-1.4.2.min.js为JQuery库,版本号为1.4.2,min表明该版本为压缩版,去除了空白字符及注释,并对代码进行了变量、函数名压缩优化等,适合用于生产环境。
JQuery是继prototype之后又一个优秀的Javascript库。它是轻量级的js库?,它兼容CSS3,还兼容各种浏览器(IE?6.0+,?FF?1.5+,?Safari?2.0+,?Opera?9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery是一个兼容多浏览器的javascript库,核心理念是write?less,do?more(写得更少,做得更多)。
JQuery的作用:
主要用于兼容个浏览器的JavaScript用法,只需要使用jQuery中指定的方法即可实现在各主流浏览器中同时兼容,能够让开发人员关注业务的开发而不必关心JavaScript的兼容性问题。
常见的几类如下:
选择器:用于选取特定的一个或多个dom节点
属性/CSS:用于改变dom的属性值及一些JavaScript控制的样式
dom操作:如对dom节点的增删查改
遍历:对dom树、数组、其他可遍历的类型进行遍历操作
事件:兼容各浏览器的事件调用,及自定义的事件等
效果:如JavaScript动画等
Ajax:统一各浏览器的Ajax请求的用法
JQuery提供了上百个函数,提高了开发的效率,方便开发者在不同浏览器下使用相同的一套代码实现指定业务功能。
jquery简介
JQuery是继prototype之后又一个优秀的Javascript库。它是轻量级的js库,它兼容CSS3,还兼容各种浏览器(IE6.0+,FF1.5+,Safari2.0+,Opera9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需要定义id即可。
jQuery是一个兼容多浏览器的javascript库,核心理念是writeless,domore(写得更少,做得更多)。jQuery在2006年1月由美国人JohnResig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由DaveMethvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。
jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。
jQuery,顾名思义,也就是JavaScript和查询(Query),即是辅助JavaScript开发的库。
历史
大概在1992年,一家称作Nombas的公司开发了一种叫做C减减(C-minus-minus,简称Cmm)的嵌入式脚本语言。Cmm背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与C(和C++)足够的相似性,以便开发人员能很快学会。这个脚本语言捆绑在一个叫做CEnvi的共享软件中,它首次向开发人员展示了这种语言的威力。
Nombas最终把Cmm的名字改成了ScriptEase,原因是后面的部分(mm)听起来过于消极,同时字母C“令人害怕”。
当NetscapeNavigator崭露头角时,Nombas开发了一个可以嵌入网页中的CEnvi的版本。这些早期的试验被称为EspressoPage(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端语言。而Nombas丝毫没有料到它的理念将会成为万维网的一块重要基石。
当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过28.8kbit/s的调制解调器连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了30秒的处理后,看到的却是一条告诉你忘记填写一个必要的字段。
那时正处于技术革新最前沿的Netscape,开始认真考虑开发一种客户端脚本语言来解决简单的处理问题。
当时工作于Netscape的BrendanEich,开始着手为即将在1995年发行的NetscapeNavigator2.0开发一个称之为LiveScript的脚本语言,当时的目的是在浏览器和服务器(本来要叫它LiveWire)端使用它。Netscape与Sun及时完成LiveScript实现。
就在NetscapeNavigator2.0即将正式发布前,Netscape将其更名为JavaScript,目的是为了利用Java这个因特网时髦词汇。Netscape的赌注最终得到回报,JavaScript从此变成了因特网的必备组件。
因为JavaScript1.0如此成功,Netscape在NetscapeNavigator3.0中发布了1.1版。恰巧那个时候,微软决定进军浏览器,发布了IE3.0并搭载了一个JavaScript的克隆版,叫做JScript(这样命名是为了避免与Netscape潜在的许可纠纷)。微软步入Web浏览器领域的这重要一步虽然令其声名狼藉,但也成为JavaScript语言发展过程中的重要一步。
在微软进入后,有3种不同的JavaScript版本同时存在:NetscapeNavigator3.0中的JavaScript、IE中的JScript以及CEnvi中的ScriptEase。与C和其他编程语言不同的是,JavaScript并没有一个标准来统一其语法或特性,而这3种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。
2006年1月,jQuery的第一个版本面世,至今已经有10年多了(注:这个时间点是截止至出书时间)。虽然过了这么久,但它依然以其简洁、灵活的编程风格让人一见倾心。在本篇文章中,我们将讲述jQuery的发展历史,让读者对jQuery有更多的了解。
在jQuery迅速发展的同时,一些大的厂商也看中了商机。2009年9月,微软和诺基亚公司正式宣布支持开源的jQuery库,另外,微软公司还宣称他们将把jQuery作为VisualStudio工具集的一部分。他将提供包括jQuery的智能提示、代码片段、示例文档编制等内容在内的功能。微软和诺基亚公司将长期成为jQuery的用户成员,其他成员还有Google,Intel,IBM,Intuit等公司。
2009年1月,jQuery1.3版发布,它使用了全新的选择符引擎Sizzle,在各个浏览器下全面超越其他同类型JavaScript框架的查询速度,程序库的性能也因此有了极大提升。这一版本的第2个变化就是提供live()方法,使用live()方法可以为当前及将来增加的元素绑定事件,在1.3版之前,如果要为将来增加的元素绑定事件,需要使用livequery插件,而在1.3版中,可以直接用live()方法。2005年8月,JohnResig提议改进Prototype的“Behaviour”库,于是他在blog上发表了自己的想法,并用了3个例子做说明。
2010年2月,jQuery1.4.2版发布,它新增了有关事件委托的两个方法:delegate()和undelegate()。delegate()用于替代1.3.2中的live()方法。这个方法比live()来的方便,而且也可以达到动态添加事件的作用。比如给表格的每个td绑定hover事件
特点
1.动态特效
2.AJAX
3.通过插件来扩展
4.方便的工具-例如浏览器版本判断
5.渐进增强
6.链式调用
7.多浏览器支持,支持InternetExplorer6.0+、Opera9.0+、Firefox2+、Safari2.0+、Chrome1.0+(在2.0.0中取消了对InternetExplorer6,7,8的支持)
历史版本
jQuery1.0
(2006年8月):该库的第一个稳定版本,已经具有了对CSS选择符、事件处理和AJAX交互的稳健支持。
jQuery1.1
(2007年1月):这一版大幅简化了API。许多较少使用的方法被合并,减少了需要掌握和解释的方法数量。
jQuery1.1.3
(2007年7月):这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始,jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。
jQuery1.2
(2007年9月):这一版去掉了对XPath选择符的支持,原因是相对于CSS语法它已经变得多余了。这一版能够支持对效果的更灵活定制,而且借助新增的命名空间事件,也使插件开发变得更容易。
jQueryUI(2007年9月):这个新的插件套件是作为曾经流行但已过时的Interface插件的替代项目而发布的。jQueryUI中包含大量预定义好的部件(widget),以及一组用于构建高级元素(例如可拖放的界面元素)的工具。
jQuery1.2.6
(2008年5月):这一版主要是将BrandonAaron开发的流行的Dimensions插件的功能移植到了核心库中。
jQuery1.3
(2009年1月):这一版使用了全新的选择符引擎Sizzle,库的性能也因此有了极大提升。这一版正式支持事件委托特性。
jQuery1.3.2
(2009年2月):这次小版本升级进一步提升了库的性能,例如改进了:visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外,也支持查询的元素按文档顺序返回。
jQuery1.4
(2010年1月14号):对代码库进行了内部重写组织,开始建立一些风格规范。老的core.js文件被分为attribute.js,css.js,data.js,manipulation.js,traversing.js和queue.js;CSS和attribute的逻辑分离。
重要变化:
1.Ajax重写
Ajax模块完全进行了重写。新增一个jXHR对象,为不同浏览器内置的XMLHttpRequest提供了一致的超集。对于XMLHttpRequest之外的传输机制,比如JSONP请求,jXHR对象也可以进行处理。(详情可以参见:jQuery.ajax文档)
此外,系统的可扩展性大大增强,可以附加各种数据处理器、过滤器和传输机制,为开发新的Ajax插件提供了方便。
2.延迟对象
延迟对象(DeferredObject,jQuery.Deferred对象)是一个可链接的(chainable)实用工具对象,实现了Promise接口,可以在回调队列中注册多个回调、调用回调队列并转发任何同步/异步函数的成败状态。正如UsingDeferredsinjQuery1.5一文中说明的,其结果是在jQuery中能够将依赖于某个任务(事件)结果的逻辑与任务本身解耦了。这一点在JavaScript中其实并不新鲜,Mochikit和Dojo等已经实现有些日子了。由于jQuery1.5的Ajax模块内置使用了延迟对象,因此通过jQuery编写Ajax程序将自动获得这一功能。
开发人员借此可以使用无法立即获得的返回值(如异步Ajax请求的返回结果),而且第一次能够附加多个事件处理器。
例如,使用了新的jQuery内部AjaxAPI就可以实现下面的代码了:
//,//=$.ajax({url:"example.php"}).success(function(){alert("success");}).error(function(){alert("error");}).complete(function(){alert("complete");});//performotherworkhere...//.complete(function(){alert("secondcomplete");});
此外,使用jQuery.Deferred还可以开发自己的延迟对象。更多详情参见:延迟对象文档。
3.jQuery.sub()
jQuery1.5提供了一种创建和修改jQuery副本的方式。可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供更好的封装、避免名称空间冲突。当然,也可以用来开发插件,但Resig强烈建议在开发插件之前,先考虑jQueryUIwidget工厂。
值得注意的是,sub函数并不提供真正的隔离,所有方法、数据、调用仍然依靠jQuery本身来支持。
4.遍历性能提高
在新版本中.children(),.prev(),.next()几个常用的遍历函数性能有了显著提高。
5.内部开发系统
JohnResig还特别提到了jQuery团队内部开发系统的两点改变:一是服务器端用Node.js替换了老的Java/Rhino系统,使得团队可以专注于JavaScript环境的新变化;二是所用的代码优化程序从GoogleClosure切换到UglifyJS,新工具的压缩效果非常令人满意。
使用方法
jQuery可以下载使用,有两个版本的jQuery可供下载
Proctionversion-用于实际的网站中,已被精简和压缩。
Developmentversion-用于测试和开发(未压缩,是可读的代码)
jQuery1.8.0版时压缩前后的对比
插件机制
jQuery的官方插件是jQueryUI。开发者可以任意扩展jQuery的函数库或者按照自己的需求开发UI组件。网上已经有数以万计的jQuery插件,覆盖各种各样的需求。例如Ajax辅助、数据表格、动态列表、XML工具、拖曳、cookie处理、弹出层等等。jQuery的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择,例如.
随着jQuery插件在网站建设过程中的使用率不断的增加,所以有必要跟进时代步伐开发出一些新的插件/代码片段,以此来巩固并提高前端用户体验,将用户体验提升到一个新的高度。其中包括FlatjQueryPriceSlider、GmapsjQueryMapPlugin、FormChimp——MailChimpAjaxpluginforjQuery等。
控件
jQueryGantt控件是一个基于原生HTML5/jQuery,功能丰富的控件,该控件真正实现了跨平台,在许多设备和浏览器中无缝的运行。
使用项目甘特图中内置的调度,依赖等功能实现任务分层列表的可视化。
使用资源甘特图实现一个资源利用视图。
使用基于API的jQuery或者基于API的MVC可帮您轻松地安装甘特图并加快应用速度。
可与诸如KnockOut(KO),jQuery.tmpl等流行的jQuery模式一同使用。
jQuery对于Web设计师来说有什么作用Web设计师是否应该学习编写代码是个充满争议的问题。通常,在完成了一件网页设计后他们把创建网页代码的繁重工作都留给了程序员们。这种现象不只出现在网络开发行业,在软件及游戏开发业也是如此。
有人也说AJAX很难,但自从jQuery出现后,再难我们都可以轻松驾驭了。jQuery作为当前流行的JavaScript框架将使Ajax变得及其简单。这篇文章就是为各位网站设计师和其他新手讲述的,jQuery对于Web设计师来说有什么作用?
对那些可能还没听说过jQuery的设计师来说,什么是jQuery?
jQuery是一种让开发和设计者在他们的网页中添加交互内容的工具,它的核心命令让你在网页中定位或创建对象并对之进行操作,它事实上是一种更容易使用的JavaScript,可以不必强迫页面刷新而对页面进行各种操作。
为什么jQuery对Web设计师有用?
JavaScript为设计拓宽了视野,而jQuery让这一切变得更简单。对那些通晓CSS的设计师来说,编写jQuery代码很类似,而对于那些拥有Flash经验的设计师来说,jQuery是一种标准化的,开放的技术,它可以实现类似Flash的交互效果。
你将在TheFutureofWebDeisgnNewYork大会上做jQuery讲座,大体内容是什么?
我将对jQuery库做一简介,接下来会通过一些实践一步一步讲解如何在站点中提升用户体验,我将演示一些技术,看看jQuery如何弥补CSS或某些浏览器的CSS处理的不足。我将讲解如何善用动画,如何防止滥用。最后将演示一些有趣的插件。
jQuery有不少实用插件,哪一些是设计师不可或缺的?
这要看网站,或者说客户的需求。我自己常用的一个插件是MikeAlsup设计的CyclePlugin,这是一个轮番播放图片的饰件,拥有很漂亮的过度效果,这个插件并不限于播放图片,还可以播放任何内容,它确实很不错,在那么小的空间可以放那么多内容。
最近
B. 开发中iFrame表单提交的古怪问题解决
微软的 NET Framework 自带了Ajax框架 将以往传统的ASP NET开发带入了一个全新的Ajax NET开发时代 我们除了在页面上引入ScriptManager控件用以在客户端注册功能丰富的Ajax框架脚本外 这个庞大的框架还提供了诸多功能强大的Ajax控件 例如著名的UpdatePanel ModalPopupExtender Rating等控件 Ajax框架和控件的引入大大简化了开发人员的开发任务 同时也给用户带来了全新的Web体验 但是我们在使用复杂的框架提供的脚本时也常常会遇到这样或那样的问题 有很多问题相信不少开发人员都能独立解决 不过有些复杂的问题还真是很伤脑筋
本来在MOSS中使用Ajax开发就已经不是一件轻易的事情 或许高手们觉得这没有什么 是的!我们在Google上会搜到很多介绍这方面的文章 而且配置步骤都写得非常详细 按照前辈们的经验 只要认真按照步骤将环境配置好 一般都是没有什么问题的 在MOSS中开发Ajax应用程序就如同简单的Ajax网页一样 只是部署的时候稍微要麻烦一些 这里我不想详细讲解在MOSS中如何进行Ajax开发 只是想说一说前段时间在MOSS开发中因为Ajax框架所引起的一个非常怪异的问题 一直困扰了我好几天 不过最终算是委曲求全得找到了一个替代的解决办法 至于会不会引起其它的什么问题 读者也可以帮我分析一下
前不久我写了一篇有关在FireFox中通过脚本获取客户端本地所选文件路径的文章 里面介绍了通过客户端上传文件时如果通过javascript得到文件的本地路径 事实上 在真正的文件上传过程中 得到文件的客户端路径意义是不大的 除非我们需要实现如图片本地预览的功能 否则我们一般都可以通过Form的Post方法得到要上传的文件 在C#一般都是这样的
<body> <form id= form runat= server method= post enctype= multipart/form data > <input id= File name= mtfile type= file /> <asp:Button ID= Button runat= server Text= Button OnClick= Button _Click /> </form></body>
protected void Button _Click(object sender EventArgs e){ HttpFileCollection files = Request Files; if (files != null && files Count > ) { for (int i = ; i < files Count; i++) { // TODO something } }} 设置Form的method属性为post 并设置enctype为mulipart/form data 当页面提交时 在服务端通过Request Files方法即可得到上传文件的对象集合 非常简单 我们根本不需要在客户端通过javascript得到文件的路径 不过这里有一个限制 那就是页面必须post到服务端才能得到要上传的文件 也就是说 我们不能通过javascript方式在页面无刷新的情况下将文件上传到服务器 这也是Ajax唯一不能做到的一件事情 不过我们通过一个比较老旧的技术可以避开这个问题 那就是在页面上使用隐藏的iFrame 在页面提交前将Form的target指向这个隐藏的iFrame 页面提交时iFrame会被刷新提交 从而避免了整个页面被刷新
事实上 在Ajax兴起前 很多 无刷新 的页面几乎都是通过这种方式来实现的 iFrame可以提交数据 而且还避免了网页的整体刷新 在Ajax兴起后 iFrame似乎很少再被人们提起 但是有一个例外
那就是文件上传!我们可以去当今比较流行的网站考察一下 像 邮箱 Gmail等 都无一例外地使用了iFrame上传文件 我们可以将上面代码中的HTML部分稍作修改就可以实现使用iFrame上传文件的功能
<body> <form id= form runat= server target= ifu method= post enctype= multipart/form data > <iframe frameborder= id= ifu name= ifu ></iframe> <input id= File name= mtfile type= file /> <asp:Button ID= Button runat= server Text= Button OnClick= Button _Click /> </form></body> 后台代码不变 只是在Form上加了一个target属性 用来指向iFrame 当页面提交时会自动提交iFrame对象 而不会将Form本身提交 当遇到页面上还有其它表单需要提交时 我们可以这样做 先在提交按钮的客户端事件上将Form的target指向隐藏的iFrame 然后返回True提交表单 这时iFrame会被提交 在服务端处理完数据保存后注册一段脚本 用来将iFrame的父页面中Form的target改回自身 这样就可以模拟一次iFrame提交而不会影响到页面上其它的功能 我们只是在页面需要被提交时才去修改Form的target属性 提交完后再改回来
这看起来似乎是一个很不错的主意 看看代码吧!
<body> <form id= form runat= server method= post enctype= multipart/form data > <iframe frameborder= id= ifu name= ifu ></iframe> <input id= File name= mtfile type= file /> <asp:Button ID= Button onclientclick= document forms[ form ] target = ifu ;return true; runat= server Text= Button OnClick= Button _Click /> </form></body>
protected void Button _Click(object sender EventArgs e){ HttpFileCollection files = Request Files; if (files != null && files Count > ) { for (int i = ; i < files Count; i++) { //TODO something } } string script = alert( { } );window parent document forms[ form ] target = _self ; ; ClientScript RegisterClientScriptBlock(this Page this GetType() string Empty string Format(script Save Successfully! ) true);}
尽管我们在页面上使用Ajax控件 该方法仍然会奏效 需要说明一点就是 上传文件的功能是不能在UploadPanel控件中使用的 否则功能会失效 因为文件上传必须刷新页面 除非我们使用iFrame提交表单 如果非要在UpdatePanel控件中完成文件上传功能 那必须设置UpdatePanel控件的PostBackTrigger属性 将触发事件的控件添加到PostBackTrigger中 如
<asp:UpdatePanel ID= update runat= server UpdateMode= Conditional > <ContentTemplate> <input id= File name= mtfile type= file /> <asp:Button ID= btSave runat= server Text= Save onclick= btSave_Click /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID= btSave /> </Triggers></asp:UpdatePanel>
这将导致页面回传 UpdatePanel控件的意义也就失去了 在页面上放置隐藏的iFrame 按照前面介绍的方法通过javascript动态去修改Form的target属性 提交iFrame 可以实现类似于Ajax方式的文件上传功能 其实页面同样被刷新了 只是刷新的是隐藏的iFrame 用户不会有什么感觉
前面说了这么多 只是想说说我所遇到的问题的背景 现在步入正题!
在MOSS中开发页面和普通的ASP NET页面基本没有什么不同 主要就是部署的时候会有一些麻烦 那么 按照前面介绍的方法将编写好的页面部署到站点上 运行时我发现了一个奇怪的问题 那就是第一次按钮触发事件的时候服务端可以正确响应 并且是通过iFrame提交过来的 但是从第二次开始就需要等待十几秒的时间按钮才能再次被触发 一开始我以为是iFrame在被提交后没有响应完毕 来不及处理第二次请求 后来通过设置断点和插入调试脚本进行测试 发现iFrame已经完全响应完毕 按钮还是不能被点击(这里说的按钮不能被点击是指Button不能响应服务端事件)
究竟发生了什么问题?
在 NET 时代 我们通常会遇到按钮的事件丢失等问题 但这是在 NET 的环境下 根本不存在这种问题 况且按钮在第一次的时候是可以被点击的 程序一直处于运行状态 没有人修改过代码 让我非常奇怪!这个问题我反复调试并采用了很多不同的方法去尝试 但是问题依旧 如查看页面上其它部分可能导致的脚本干扰 setInterval方法的使用是否会导致程序处于等待状态(事实上这个根本不可能)
去掉所有可能导致此问题的控件和代码等等 天啊!我几乎尝尽了所有能够想到的办法 但是这块大石头依然纹丝不动 我崩溃了!!
过了一个周末 在家睡了两天 脑海中一直想的就是究竟是什么原因导致了按钮的事件不能被触发 我也尝试过在FireFox下利用FireBug跟踪按钮的客户端代码执行情况 没有什么结果 周一上班的时候突然想到用排除法来验证一下 看看究竟是哪部分代码出现了问题 因为之前我在本地创建的工程中使用了iFrame提交表单 并且利用javascript在页面往返服务器的过程中动态修改了Form的target属性 并没有发现按钮事件不能被触发的问题 说明问题不是出在我所写的代码中 我在MOSS站点中创建了一个功能一样的页面 上面只有非常简单的几行代码 然后编译 部署 激活特定的Feature 访问页面 简单看了一下 功能很正常 说明这种方法在MOSS下是可以正常使用的 并没有之前假象的会受到MOSS本身机制的影响
生产环境中的页面要稍微复杂一些 里面除了一些必须的功能和UserControl外 整个页面是继承自一个公共的模板页 难道问题出在模板页上?我又仔细看了看模板页中的代码 几乎尝试着将模板页中所有的控件都删除了 但是问题依然没有解决 一身冷汗啊 一上午的时间就这么让我浪费了 做过MOSS项目的朋友可能会比较清楚 在MOSS上开发项目复杂的并不是如何去写代码 而是部署和调试 经常大把的时间都浪费在这个上面 更何况我为了测试这个问题产生的原因还要新建页面重新部署站点 然后调试代码 光这个过程就比较繁琐了
反正已经开始做了 午饭过后 我打算彻底搞定它 问题既然不是出在页面本身 那一定是出在模板页上 因为之前没加模板页的时候是可以的 后来将页面继承自模板页后问题就来了 在FireFox中查看页面的源代码 仔细查看生成的HTML和脚本 发现在Body和Form标签上有两个脚本事件 不知道是干什么用的 很好奇 问了一下老大 他说这是MOSS在新建模板页时自动加上的 没有谁刻意去加它 代码片段如下
<body onload= javascript:_spBodyOnLoadWrapper(); > <form id= Form runat= server onsubmit= return _spFormOnSubmitWrapper(); method= post enctype= multipart/form data > 我尝试着将这两个事件取消掉 然后重新部署运行程序 哈哈!终于可以了 那个按钮的事件再也没有丢失过 可以一直被点击 而不会出现不响应的情况 其实罪魁祸首的就是form的onsubmit事件中的_spFormOnSubmitWrapper方法 取消它就可以解决问题
但是问题马上又来了 既然这个事件是MOSS自动加上的 那肯定有它的用途 我们不能随意就将它删掉 说不定以后哪里就会出问题(虽然我到后来也不太清楚这个函数究竟是用来干什么的) 那么只能曲线救国了 用FireBug看看它的具体代码吧 顺便跟了一下
var _spSuppressFormOnSubmitWrapper=false;function _spFormOnSubmitWrapper(){if (_spSuppressFormOnSubmitWrapper){return true;}if (_spFormOnSubmitCalled){return false;}if (typeof(_spFormOnSubmit)== function ){var retval=_spFormOnSubmit();var testval=false;if (typeof(retval)==typeof(testval) && retval==testval){return false;}}RestoreToOriginalFormAction();_spFormOnSubmitCalled=true;return true;} 这个方法只要返回true就会触发服务器端时间 如果返回false则不会触发 我反复看了一下 导致函数返回false的原因是因为_spFormOnSubmitCalled的值为true 那么我们只需要将这个变量的值设为false即可重新触发服务器端事件了 这个好办 我马上修改代码 在button按钮的客户端事件代码中这样写
//aspnetForm为Form的客户端name iframeHidden为隐藏的iFrame的namedocument forms[ aspnetForm ] target = iframeHidden ;_spFormOnSubmitCalled = false;return true; 然后服务端返回的时候再将form的target改回_self 这样就可以了!
我不知道MOSS自动加上的那个Form事件是用来干什么的 但至少我让_spFormOnSubmitCalled变量的值为false可以导致按钮的事件被触发 并且可以实现我预期的效果
因为我在页面提交成功后会整个刷新页面 所以也不用担心修改这个值后会带来什么样的后果 最后来看一下服务器端要注册的脚本
private const string scriptOK = @ alert( { } ); window parent location href += # ; window parent location reload(); ;private const string scriptFailed = @ alert( { } ); window parent document forms[ aspnetForm ] target = _self ; ; 分为两种 如果成功则重新刷新整个页面 如果失败则修改父页面Form的target属性的值为_self 你可能会问我为什么要将父页面的location href加上一个# 这主要是为了解决在FireFox下通过iFrame提交表单并重新刷新整个页面时出现是否重新提交数据的提示(这个问题在IE下不会出现) 浏览器只认URL 我们稍微修改一下URL的内容 只要地址不变 重新刷新页面时就不会出现是否重新提交数据的提示了
到目前为止 我将我的代码做了这样的修改 不知道会不会遇到什么问题 写这篇文章的目的有两个 一是记录一下自己解决这个问题的过程 二是想告诉各位正在做MOSS开发的朋友 如果遇到通过Ajax方式无法触发服务器端事件的问题时 不妨认真检查检查客户端生成的HTML和脚本 找找原因在哪里
lishixin/Article/program/net/201311/12554
C. ASP.NET是什么
ASP.NET是.NET FrameWork的一部分,是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们。 指 Active Server Pages(动态服务器页面) ,运行于 IIS(Internet Information Server 服务,是Windows开发的Web服务器)之中的程序 。
………………………………………………
如果对aspnet感兴趣,看看一个大专生怎么自学aspnet到找到工作。
先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说 出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不 到希望,我就退学了。
退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后 我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘 做技术的,可是处处碰壁。
一次偶然的机会,我才听到aspnet这个行业。那天我去新华书店,在计算机分类那边想找本书学习 。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习aspnet,然后给我介绍了一下 aspnet现在的火热情况,告诉我学aspnet多么的有前景,给我了一份传单,aspnet培训的广告。听了 她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。
回家后,我就上网查了下aspnet,确实是当今比较热门的行业,也是比较好找工作的,工资也是相 对比较高。我就下决心想学aspnet了。于是我去找aspnet培训的相关信息,说真的,我也很迷茫,我 不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。
后来,我在网络知道看到一篇让我很鼓舞的文章是一个aspnet高手介绍没有基础的朋友怎么自学入 门学aspnet,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实 在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。
我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会 我再去培训。
主意一定,我就去搜索aspnet的视频,虽然零星找到一些aspnet的视频,但是都不系统,我是想找 一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教, 不懂可以请教的。
后来我又找到一份很好的视频,是在IT学习联盟推出的一份视频《零基础aspnet就业班》(喜欢《 零基础aspnet就业班》的可以复制 sina.lt/bsjr 粘贴浏览器地址栏按回车键即打开)
下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。
收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C#语言视频教程 学起,话说简单,其实我还是很多不懂的,只要重复多看几遍,就能看懂。C#语言我差不多学了一个礼 拜,接下来我就学了winform,SQL Server,html/css/javaScript,差不多也就三个礼拜。我每天都在不 停的写一些简单的代码,这样一月后我基本掌握了aspnet的全部基础。
接下来开始学习aspnet高级课程,老师幽默风趣而又轻松的课堂教课,使我发现原来学习aspnet并 不是一件很难的事情。之前我把aspnet基础学得还不错,到了到了aspnet高级部分,我觉不又不是很 难,可能老师太牛了,他能把复杂的问题讲的比较通俗易懂,有些难点的地方我还是连续看了五六次, 把他弄懂。每天下午6点下班后,吃了饭,马上跑回家。看视频,买了几本笔记本。当时,为了编程还花几百元了台二手的台式电脑,配置一般,但编程是足够的。一边看视频,一边记笔记,把重点都记下来,还一边跟着老师敲代码,为了能尽早学会aspnet。每天都坚持学5-6个小时。经常学到晚上一点多才睡觉。星期六,日不用上班,每天7点多起床,学到晚上11,12点。那段时间特别辛苦,特别累。在学习aspnet的三个多月里,除了吃饭睡觉工作,剩余的时间都在学习,因为我知道自己的计算机基础不是很好,也没有学过什么计算机,相对于那些科班的人来说我要比他们付出更多的努力。我只能咬紧牙关,坚持下去,我不能放弃,我要完成我的梦想,我要让我的家人过上好日子。终于三个多月后我把aspnet教程里的内容和项目都学完了,在学项目的过程中我发现项目特别重要,他能把你学过的知识全部联系起来,能更好的理解你所学的知识。还有学习过程中,动手很重要,要经常跟着老师动手敲,动手吧,跟着做,一行一行的跟着敲,再试着加一些自己的功能,按照自己的思路敲一些代码,收获远比干听大的多。 如果遇到暂时对于一些思路不能理解的,动手写,先写代码,慢慢你就会懂了。
于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。
后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是aspnet开发程序员,但我也比较满足,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。
把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。
…………………………………………