导读: prototype.js 1.4版开发者手册(强烈推荐) prototype.js开发者手册
对应版本1.4.0 original article by sp('Sergio Pereira') Sergio Pereira last update: March 30th 2006 中文版:THIN 最后更新:2006-3-31 看到一个很好的东西在国内没有被很多人使用起来,实在是不爽,所以花了很大功夫把这个手册翻译成中文,由于这篇文章很长,所以,翻译的工作量很大而且有些地方英文版也没有说清楚,虽得查看源代码,好在不是坚持做完了,大家鼓励下啊!^o^ prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。 prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值,所以我强烈建议B/S开发人员和对JS开发感兴趣的朋友去浏览一些它的源代码,其中有很多的珠玑,你绝对会觉得读它的源代码是一种享受,当然要读得懂,呵呵。 网上也有人写过1.3版的源码解读,大家可以找来看看。不过1.4版做了很大的扩充,所以希望有朋友写出1.4版的源码解读。 几点说明: 有朋友说prototye已经有人翻译过了,呵呵,是对的,说明你以前关注过它,不过原来翻译的是1.3版的文档,1.4版有很多重要的扩展,而且pre_1.5版现在也出来,不地改动不大。 有朋友说有用多没有翻译地来的,拜托,只是各个方法的参数说明没有翻,这些说明很多都是什么类型,还是有空再弄吧,先将就一下,对不起了,翻到这个程序已经很累人了,毕竟有这么长。 做成CHM文档的事也只能Sorry,因为我没有这个时间,也没有做过CHM,我觉得排版一下看网页和CHM是差不多吧。
prototype.js是什么? 万一你没有使用过大名鼎鼎的prototype.js,那么让我来告诉你,prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。 如果你最近尝试使用它,你大概了解到文档并不是作者的一个强项。和在我以前使用这个类库的不少开发者一样,一开始,我不得不一头扎进阅读prototype.js的源代码和实验它的功能中。我想,在我学习完它之后,把我学到的东西分享给大家是件不错的事。 同时,在本文中,我也将提供一个关于这个类库提供的objects,classes,functions,extensions这对东东的非官方参考 在阅读这个文档时,熟悉Ruby的开发者将会注意到Ruby的一些内建类和本类库扩展实现之间非常相似。
相关文章 Advanced JavaScript guide.
一些实用的函数 这个类库带有很多预定义的对象和实用函数,这些东东的目的显然是把你从一些重复的打字中解放出来 。
使用$()方法 $() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写,就像这个DOM方法一样,这个方法返回参数传入的id的那个元素。 比起DOM中的方法,这个更胜一筹。你可以传入多个id作为参数然后 $() 返回一个带有所有要求的元素的一个 Array 对象。
使用$A()
函数 $A()函数能把它接收到的单个的参数转换成一个Array对象。 这个方法,结合被本类库扩展了的Array类,能方便的把任何的可枚举列表转换成或拷贝到一个Array对象。一个推荐的用法就是把DOM Node Lists转换成一个普通的Array对象,从而更有效率的进行遍历,请看下面的例子。
使用 $H()
函数 $H()函数把一些对象转换成一个可枚举的和联合数组类似的Hash对象。
使用$R()
函数 $R()是new ObjectRange(lowBound,upperBound,excludeBounds)的缩写。 跳到ObjectRange类文档可以看到一个关于此类的完整描述. 此时,我们还是先来看一个例子以展示这个缩写能代替哪些方法吧。其它相关的一些知识可以在Enumerable对象文档中找到。
使用Try.these()
函数 Try.these()方法使得实现当你想调用不同的方法直到其中的一个成功正常的这种需求变得非常容易, 他把一系列的方法作为参数并且按顺序的一个一个的执行这些方法直到其中的一个成功执行,返回成功执行的那个方法的返回值。 在下面的例子中, xmlNode.text在一些浏览器中好用,但是xmlNode.textContent在另一些浏览器中正常工作。 使用Try.these()方法我们可以得到正常工作的那个方法的返回值。
Ajax
对象 上面提到的共通方法非常好,但是面对它吧,它们不是最高级的那类东西。它们是吗?你很可能自己编写了这些甚至在你的脚本里面有类似功能的方法。但是这些方法只是冰山一角。 我很肯定你对prototype.js感兴趣的原因很可能是由于它的AJAX能力。所以让我们解释当你需要完成AJAX逻辑的时候,这个包如何让它更容易。 Ajax对象是一个预定义对象,由这个包创建,为了封装和简化编写AJAX功能涉及的狡猾的代码。 这个对象包含一系列的封装AJAX逻辑的类。我们来看看其中几个类。
使用Ajax.Request
类 如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建XMLHttpRequest对象并且异步的跟踪它的进程, 然后解析出响应 然后处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。 为了支持 AJAX 功能。这个包定义了 Ajax.Request 类。 假如你有一个应用程序可以通过url http://yoursever/app/get_sales?empID=1234&year=1998与服务器通信。它返回下面这样的XML 响应。
1234
1998-01
$8,115.36
1234
1998-02
$11,147.51 用 Ajax.Request对象和服务器通信并且得到这段XML是非常简单的。下面的例子演示了它是如何完成的。
你注意到传入 Ajax.Request构造方法的第二个对象了吗? 参数{method: 'get', parameters: pars, onComplete: showResponse}表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为 method值为 'get'的属性,另一个属性名为 parameters包含HTTP请求的查询字符串,和一个onComplete属性/方法包含函数showResponse。 还有一些其它的属性可以在这个对象里面定义和设置,如 asynchronous,可以为true或 false来决定AJAX对服务器的调用是否是异步的(默认值是 true)。 这个参数定义AJAX调用的选项。在我们的例子中,在第一个参数通过HTTP GET命令请求那个url,传入了变量 pars包含的查询字符串, Ajax.Request 对象在它完成接收响应的时候将调用showResponse方法。 也许你知道, XMLHttpRequest在HTTP请求期间将报告进度情况。这个进度被描述为四个不同阶段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request对象在任何阶段调用自定义方法 ,Complete是最常用的一个。想调用自定义的方法只需要简单的在请求的选项参数中的名为 onXXXXX属性/方法中提供自定义的方法对象。 就像我们例子中的 onComplete。你传入的方法将会被用一个参数调用,这个参数是 XMLHttpRequest对象自己。你将会用这个对象去得到返回的数据并且或许检查包含有在这次调用中的HTTP结果代码的 status属性。 还有另外两个有用的选项用来处理结果。我们可以在onSuccess选项处传入一个方法,当AJAX无误的执行完后调用, 相反的,也可以在onFailure选项处传入一个方法,当服务器端出现错误时调用。正如onXXXXX选项传入的方法一样,这两个在被调用的时候也传入一个带有AJAX请求的XMLHttpRequest对象。 我们的例子没有用任何有趣的方式处理这个 XML响应, 我们只是把这段XML放进了一个文本域里面。对这个响应的一个典型的应用很可能就是找到其中的想要的信息,然后更新页面中的某些元素, 或者甚至可能做某些XSLT转换而在页面中产生一些HTML。 在1.4.0版本中,一种新的事件回传外理被引入。如果你有一段代码总是要为一个特殊的事件执行,而不管是哪个AJAX调用引发它,那么你可以使用新的Ajax.Responders对象。 假设你想要在一个AJAX调用正在运行时,显示一些提示效果,像一个不断转动的图标之类的,你可以使用两个全局事件Handler来做到,其中一个在第一个调用开始时显示图标,另一个在最后一个调用完成时隐藏图标。看下面的例子。
Loading...
更完全的解释,请参照 Ajax.Request 参考和 Ajax选项参考。
使用Ajax.Updater
类 如果你的服务器的另一端返回的信息已经是HTML了,那么使用这个程序包中 Ajax.Updater类将使你的生活变得更加得容易。用它你只需提供哪一个元素需要被AJAX请求返回的HTML填充就可以了,例子比我写说明的更清楚。
你可以看到,这段代码比前面的例子更加简洁,不包括 onComplete方法,但是在构造方法中传入了一个元素id。 我们来稍稍修改一下代码来描述如何在客户端处理服务器段错误成为可能。 我们将加入更多的选项, 指定处理错误的一个方法。这个是用 onFailure选项来完成的。我们也指定了一个 placeholder只有在成功请求之后才会被填充。为了完成这个目的我们修改了第一个参数从一个简单的元素id到一个带有两个属性的对象, success(一切OK的时候被用到) 和 failure(有地方出问题的时候被用到) 在下面的例子中没有用到failure属性,而仅仅在 onFailure处使用了 reportError方法。
如果你的服务器逻辑是连同HTML 标记返回JavaScript 代码, Ajax.Updater对象可以执行那段JavaScript代码。为了使这个对象对待响应为JavaScript,你只需在最后参数的对象构造方法中简单加入evalScripts: true属性。但是值得提醒的是,像这个选项名evalScripts暗示的,这些脚本会被执行,但是它们不会被加入到Page的脚本中。“有什么区别?”,可能你会这样问。我们假定请求地址返回的东东像这样:
如果你以前这样尝试过,你知道这些脚本不会如你所期望的那样工作,原因是这段脚本会被执行,但像上面这样的脚本执行并不会创建一个名叫sayHi的函数,它什么也不做。如果要创建一个函数,我们应当把代码改成下面这个样子:
为什么我们在上面的代码中不使用var关键字来声明这个变量呢(指sayHi ),因为那样做创建出来的函数将只是当前脚本块的一个局部变量(至少在IE中是这样)。不写var关键字,创建出来的对象的作用域就是我们所期望的window。 更多相关知识,请参看 Ajax.Updater reference和options reference.
枚举... 噢!噢! 你知道,我们都是这样来做循环的,建一个Array,用elements组织它们,再建一个循环结构(例如for,foreach,while)通过index数字来访问每一个element,再用这个element做一些动作。 当你想到这时,你会发现几乎每次写循环代码你都会迟早用到一个Array。那么,如果Array对象能够提供更多的功能给它们的迭代器使用不是很爽吗?确实是这样,事实上很多的编程语言都在它们的Array或其它类似的结构中(如Collections,Lists)提供一些这样的功能。 现在好了,prototype.js了给我们一个 Enumerable对象,它实现了很多和可迭代数据进行交互的窍门。和原有的JS对象相比prototype.js更上一层楼,它对Array类s扩展了所有枚举要用的函数。
循环, Ruby样式的 在标准的javascript中,如果你想把一个array中的所有elements显示出来,你可以像下面代码这样写得很好:
现在我们再下一城,看看如何过滤一个Array中的元素,从每个元素中得到我们想要的成员。
element 返回带有元素名称和所有被选择的选项的值或文本的 Array, 如 ['elementName', 'selOpt1 selOpt4 selOpt9'] The Abstract.TimedObserverclass 这个类是用于其它监听一个元素的值(或者任何类中涉及的属性)变化的类的基类,这个类像一个抽象类一样被使用。 子类可以被创建来监听如输入项目值,或style属性,或表格的行数,或者其他任何对跟踪变化相关的东西。 子类必须实现这个方法来决定什么才是被监听的元素的当前值。 Method Kind Arguments Description [ctor](element, frequency, callback) constructor element: element object or id, frequency: interval in seconds, callback: function to be called when the element changes 创建一个监听元素的对象。 getValue() instance, abstract (none) 子类必须实现这个方法以瘊定什么这个元素被监视的当前值。 registerCallback() instance (none) 这个方法通常不会被外部调用。 被这个对象自己调用来开始监听那个元素。 onTimerEvent() instance (none) 这个方法通常不会被外部调用。 被这个对象自己调用来周期性的检查那个元素。 Property Type Description element Object 被监听的元素对象。 frequency Number 每次检查中的以秒为单位的时间间隔。 callback Function(Object, String) 只要元素改变这个方法就会被调用。 会接收到元素对象和新值作为参数。 lastValue String 元素被核实的最后一个值。 The Form.Element.Observerclass Abstract.TimedObserver的一个实现类用来监听表单输入项目的值的变化。当你想监听一个没有带报告值变化事件的元素的时候使用这个类。否则的话使用 Form.Element.EventObserver类代替。 Method Kind Arguments Description [ctor](element, frequency, callback) constructor element: element object or id, frequency: interval in seconds, callback: function to be called when the element changes 继承自 Abstract.TimedObserver. 创建一个监听元素值属性的对象。 getValue() instance (none) 返回元素的值。 The Form.Observerclass Abstract.TimedObserver的一个实现类用来监听表单中任何数据项的值的变化。当你想监听一个没有带报告值变化事件的元素的时候使用这个类。 否则的话使用类Form.EventObserver代替。 Method Kind Arguments Description [ctor](form, frequency, callback) constructor form: form object or id, frequency: interval in seconds, callback function to be called when any data entry element in the form changes 继承自 Abstract.TimedObserver. 创建一个监听表单变化的对象。 getValue() instance (none) 返回所有表单数据的一系列值。 The Abstract.EventObserverclass 这个类被用作其他一些类的基类,这些类具有在一个元素的值改变事件发生的时候执行一个回调方法这样的功能。 类 Abstract.EventObserver 的多个对象可以绑定到一个元素上,不是一个帮其他的擦出了,而是按照他们付给元素的顺序执行这些回调方法。 单选按钮和复选框的触发事件是 onclick,而文本框和下拉列表框/下拉列表框的是 onchange。 Method Kind Arguments Description [ctor](element, callback) constructor element: element object or id, callback: function to be called when the event happens 创建监听元素的对象。 getValue() instance,abstract (none) 子类必须实现这个方法以瘊定什么这个元素被监视的当前值。 registerCallback() instance (none) 这个方法通常不会被外部调用。 被对象调用来把自己绑定到元素的事件上。 registerFormCallbacks() instance (none) 这个方法通常不会被外部调用。 被对象调用来把自己绑定到表单中的每一个数据项元素的事件上。 onElementEvent() instance (none) 这个方法通常不会被外部调用。 将被绑定到元素的事件上。 Property Type Description element Object 被监听的元素对象。 callback Function(Object, String) 只要元素改变就调用的方法。会接收到元素对象和新值作为参数。 lastValue String 元素被核实的最后一个值。 The Form.Element.EventObserverclass Abstract.EventObserver的一个实现类,它在监测到表单中数据项元素的值改变的相应事件时候执行一个回调方法。 如果元素没有任何报告变化的事件,那么你可以使用 Form.Element.Observer类代替。 Method Kind Arguments Description [ctor](element, callback) constructor element: element object or id, callback: function to be called when the event happens 继承自 Abstract.EventObserver。 创建一个监听元素值属性的对象。 getValue() instance (none) 返回元素的值。 The Form.EventObserverclass Abstract.EventObserver的一个实现类,监听表单对象中包含的任何对象的任何变化,用元素的事件检测值的变化。如果元素没有任何报告变化的事件, 那么你可以使用Form.Observer类代替。 Method Kind Arguments Description [ctor](form, callback) constructor form: form object or id, callback: function to be called when any data entry element in the form changes 继承自 Abstract.EventObserver。 创建一个监听元素值属性的对象。 getValue() instance (none) 返回所有表单数据的一系列值。 Position对象 (预备文档) 这个对象提供许多和元素位置相关的方法。 Method Kind Arguments Description prepare() instance (none) 调整 deltaX和 deltaY属性来协调在滚动位置中的变化。 记得在页面滚动之后的任何调用的withinIncludingScrolloffset之前调用这个方法。 realOffset(element) instance element: object 返回这个元素的正确滚动偏差的 Array对象, 包括所有影响元素的滚动偏差。结果数组类似 [total_scroll_left, total_scroll_top] cumulativeOffset(element) instance element: object 回这个元素的正确滚动偏差的 Array对象, 包含任何被放置的父元素强加偏差。结果数组类似 [total_offset_left, total_offset_top] within(element, x, y) instance element: object, x and y: coordinates of a point 测试给定的点的坐标是否在给定的元素的外部矩形范围之内。 withinIncludingScrolloffsets(element, x, y) instance element: object, x and y: coordinates of a point 测试给定的点的坐标是否在给定的元素的外部矩形范围之内(包含scroll offsets)。 overlap(mode, element) instance mode: 'vertical' or 'horizontal', element: object 在调用这个方法之前需要调用within()。这个方法返回0.0到1.0之间的数字,来表示坐标在元素重叠的分数。 举个例子,如果元素是一个边长是100px的正方形的DIV,并且位于(300, 300), 然后 within(divSquare, 330, 330);overlap('vertical', divSquare); 会返回 0.10,意思是那个点位于DIV顶部边框以下 10% (30px) 的位置上。 clone(source, target) instance source: element object or id, target: element object or id 改变目标元素的大小尺寸和位置与源元素的相同。 posted @ 2006-04-01 18:38 THIN阅读(106576) 评论(129) 编辑收藏所属分类: DHTML &Javascript 发表评论 #1楼 2006-04-01 18:41 | 张朝勇 [未注册用户] 好哦,很多东东都没有翻译过来,大家看的都很难受 #2楼 2006-04-01 18:43 | exhjw [未注册用户] 是个好东西,好象已经有人翻译过了吧 我下的那个版本的ajax不支持firefox #3楼 2006-04-01 18:44 | exhjw [未注册用户] 是个好东西 中文文档已经有人翻译过了 不过我下的那个版本的ajax不支持firefox #4楼 2006-04-01 19:08 | pass by [未注册用户] 不错,感谢楼主的工作! good job! 好东西啊,做成CHM就好了,这样看起来不太方便 做成chm的就好了,这样看起来很不方便呢 几点说明: 有朋友说prototye已经有人翻译过了,呵呵,是对的,说明你以前关注过它,不过原来翻译的是1.3版的文档,1.4版有很多重要的扩展,而且pre_1.5版现在也出来,不地改动不大。 有朋友说有用多没有翻译地来的,拜托,只是各个方法的参数说明没有翻,这些说明很多都是什么类型,还是有空再弄吧,先将就一下,对不起了,翻到这个程序已经很累人了,毕竟有这么长。 做成CHM文档的事也只能Sorry,因为我没有这个时间,也没有做过CHM,我觉得排版一下看网页和CHM是差不多吧。 不错,正需要这方面的内容,谢谢啦! 这是我第次翻译上万字(14,220字)的文章,如果有词不达意的地方请指正,而且我对原文中不少原句进行了再加工和有些地方查阅源代码做了一些补充,所以不正确之处请批评。对于prototype.js我只完整看过1.3版的源代码,1.4版只在翻译时觉得原文不太清楚就看了相关部分,所以对源代码了解不是很完整。 对于控件开发团队的成员,我想大家最好都对此类库有个了解,以后我们开发控件的话,我想也利用一下这个类库。 谢谢你的工作,我有一点文字上的小建议: 枚举 和 迭代 似乎分别用 enum 和 enumeration(enumerable..) 不同的词表示的,这个从英文讲当然是同源的词,不过中文中应该都有成型的翻译了,还是按照标准来比较好吧。 比如大家都知道 C# 里的枚举和迭代器分别指得是什么。 感觉只是将gb2312 V1.3 与 en-us V1.4合到一起,不过还是感谢谢thin,prototype是个好东西,可以做为轻量级的Ajax应用首选 @垃圾猪 其实你没有真正看吧,很多都是重新翻译过的,特点是前面的部分,后面的Reference有些部分是从1.3中拷过来的。 @NeilChen123 呵呵,是该注意。 #13楼 2006-04-02 16:25 | cmic [未注册用户] 谢谢楼主翻译这个好东西,我想问一下 prototype.js浏览器兼容性怎么样? #14楼 2006-04-02 17:19 | Ardor Leo [未注册用户] 好东西,谢了! @cmic 呵呵,使用prototype不用考虑浏览器的兼容问题,这是它的一个爽的地方。 #16楼 2006-04-03 10:02 | Darwin [未注册用户] 辛苦了 #17楼 2006-04-03 16:31 | philip [未注册用户] good job! 非常感谢您的工作, 向你致敬 非常感谢,1.3的我用过,但没像你这般深入研究,佩服.... 收藏了你的文章。 为什么我们在上面的代码中不使用var关键字来声明这个变量…… 这里我在IE6,firfox1.5中不管使不使用都没分别! #21楼 2006-04-16 01:22 | rrr [未注册用户] xcvbcxbcxbxcvbcxbrrrrrrrrrrrrrrrrrrrrrrrrrrrrr #22楼 2006-04-16 01:22 | rrr [未注册用户] erewrer 觉得它的 $("id") 函数还是不如微软提供的简洁. (开源的可视化的自定义web表单工具,在: http://www.fcsoft.com.cn) #24楼 2006-04-19 19:40 | DDream [未注册用户] I love you!现在正好想静下心来好好的学一下了,呵呵,正需要这个东西!楼主好厉害啊!真的很佩服你!要向你看齐了! #25楼 2006-04-24 22:44 | 厦门小陈 [未注册用户] JS代码部分 function getChild1(par) { var url = 'http://localhost/mar/users/register/check_name.php">http://localhost/mar/users/register/check_name.php'; var pars = 'pid=' + par; var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onLoading:showLoad(par), onComplete: showResponse1 } ); } function getChild2(par) { var url = 'http://localhost/mar/users/register/check_name.php">http://localhost/mar/users/register/check_name.php'; var pars = 'pid=' + par; var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onLoading:showLoad(par), onComplete: showResponse } ); } function showResponse(originalRequest) { $('child2').innerHTML = originalRequest.responseText; Element.hide('child1'); } function showResponse1(originalRequest) { $('child1').innerHTML = originalRequest.responseText; Element.hide('child2'); } HTML部分: bbssec bbsemail 我比较菜,上面有两个连接,要写两个函数getChild(1)和getChild(2),有没有办法只写一个函数像这样的getChild(参数)就可以实现上面的功能? 我试过用getChild(参数),但为什么onComplete: showResponse这里的showResponse不能像这样showResponse(参数)呢? onLoading:showLoad(par), 这一句应该也有问题吧,onComplete:showResponse这一句只是声明一个onComplete值为showRsponse这个函数的的Option,以传给Ajax实例,JS中任何东东都是对象,所以showResponse这里也是一个对象,就像一个变量一样。onLoading:showLoad只是把showLoad注册到onLoading事件中,而不会把它的参数也注册进去。所以,你这时传的参数并不会成为最后调用时引用的参数 #27楼 2006-04-24 23:10 | 厦门小陈 [未注册用户] showLoad我试过了没有问题,主要是showRsponse不能带参数的. 刚才试了一下,用这个下面的代码就可以了. 就是在PHP处理里,用@@@号隔开ID号和内容,然后在showResponse里再解析一下,做出相应的判断就行了.只是感觉办法有点土. function getChild(par) { var url = 'http://localhost/mar/users/register/check_name.php'; var pars = 'pid=' + par; var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onLoading:showLoad(par), onComplete: showResponse } ); } function showResponse(originalRequest) { var strs=originalRequest.responseText; var strsstr=strs.split("@@@"); var a=strsstr[0]; var b=strsstr[1]; $('child'+a).innerHTML = b; var i; for(i=1;i<4;i++){ if(i!=a){ Element.hide('child'+i); } } } function showLoad(par){ Element.show('child'+par); $('child'+par).innerHTML=" } #28楼 2006-04-26 11:26 | aysun168 [未注册用户] 爱死你了! #29楼 2006-05-19 11:12 | good [未注册用户] 顶,一下,可惜这个库对ie5不支持 支持啊,何出此言 非常感谢您的劳动。 请问它的Ajax功能可以调用Web服务吗?如果可以的话该如何实现? 看了很有帮助,我自己做成chm版本的方便自己看 http://maquanjun.googlepages.com/protoype-js.chm 如果大家需要就自己down一下吧 maquanjun 真是信了你的邪,把网址加进去就成了CHM格式文档了?你这种搞法:我鄙视你!!! 像你这么搞,我还不如直接收藏这个网址得了。。。 具体说我是把html保存下来,转的,也是第一次转,新手 自己看的,自己多事发了上来 又没什么利益的 说话客气些好吧 我刚刚拔了网线试试,还是可以看的,排版稍微乱点 请主人把我上面的留言删了吧,当我多事 我下载了打开看,也是“该页无法显示”。 不过你也应该是好意,自己知道就可以了。不必太在意^-^。 @maquanjun 帮托,我就说了句转载请注明引用地址,我还说了请,请教一下,怎么样更客气 #38楼 2006-07-11 22:15 | javaonme [未注册用户] 算是找到组织了....prototype是好东东! #39楼 2006-07-14 09:23 | Teng [未注册用户] 好东西,贴到我的blog上去了 #40楼 2006-07-19 17:10 | cdnini [未注册用户] Updater在firework里面好像不支持 #41楼 2006-07-25 21:21 | yilaylay [未注册用户] 站长,做的不错啊,好容易找到中文版的帮助,E文读起来太费劲 感谢。。。 #42楼 2006-08-10 09:34 | Macky [未注册用户] 非常不错,值得鼓励一下. 很好,我已经在用了,是从chinaren借用过来的。 #44楼 2006-08-28 19:02 | netbrand [未注册用户] var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } 代码中的两个this 是指的同一个对象吗?? 能不能解释一下 #45楼 2006-09-09 18:12 | 小乐 [未注册用户] 说实话, 这个翻译看了后. 应该算是不够认真的. 错别字很多. 连上面说明中的红字都有错误. 不是->还是, 生写->重写 直接从1.3板拷贝过来的地方连链接都不改, 变成无效链接. 有些话翻译得... 意译一下嘛... #46楼 2006-09-09 19:03 | 小乐 [未注册用户] 就如我们上面提到的,把你的Array中的elements当成相同的类型使用相同的属性和函数是很通用(Common,不知该翻译成通用还是庸俗)的。让我们看看怎么样利用我们新的马力强劲的Arrays的迭代功能吧。 依照标准找到一个element。 Like we mentioned above, it's very common for all the elements in your array to be of the same kind, with the same properties and methods. Let's see how we can take advantage of iterator functions with our new souped-up arrays. Finding an element according to a criteria. 读着很累... #47楼 2006-09-09 19:10 | 小乐 [未注册用户] 认真点, 意译一下: 前面说过,把 array 中的 element 看作同一类型来调用属性和方法是很常用的。看看怎么样使用强大的新 Arrays 迭代方法吧。 下面的例子是通过标准方法找到一个 element。 @小乐 对不起,你说的问题确实是由于当时时间不太足,有点赶,没有做好,我以后打个时间再修正一下,比如说1.5版的时候。 已经很不错了,多谢楼主! 怎么在ie5上面运行有错误的,prototype看来还是有兼容的问题 #52楼 2006-10-09 15:09 | cuidanzxy [未注册用户] 谢谢楼主,人民会感谢你的。辛苦啦。 #53楼 2006-10-15 19:38 | jakarta [未注册用户] 辛苦了。 不过我看了原文,不得不遗憾的说,阁下的翻译水平确实尚待提高 #54楼 2006-11-02 11:21 | dhcn [未注册用户] Many Thanks! 支持一下! #55楼 2006-11-07 15:57 | 大件 [未注册用户] 有些地方翻译得文绉绉的。但还是要支持一下 #56楼 2006-11-10 09:03 | 小生[匿名] [未注册用户] 楼主是好人,支持 #57楼 2006-11-13 12:00 | wm [未注册用户] 我很鄙视那位(jakarta)说风凉话的人,既然那么厉害也翻译一类似的东西啊! 真的很有启发,谢谢楼主了,还有楼上的maquanjun 的CHM文档,一并感谢! 您的博客办得非常好,热烈欢迎您加入"博客网址大全"! 天下博客---集天下之博客,展博客于天下! 博览众客、以博会友!网址:http://blog.etao8.cn 你的文章又有另外一个中文版本,在JAVA上, 比你写得好: https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html Eureka chen: http://ee-studio.com @eureka 谢谢楼上提醒 :) #62楼 2006-12-21 21:32 | mrt [未注册用户] new Ajax.Updater时为什么返回的html必须是“utf-8”,gbk就是乱码呢?? #63楼 2006-12-27 10:00 | zz[匿名] [未注册用户] 谢谢,学习 #64楼 2007-01-03 20:01 | feixun [未注册用户] 非常好! #65楼 2007-01-13 17:00 | igmh [未注册用户] 非常好! #67楼 2007-01-26 10:48 | GoKU [未注册用户] 1.5的出了,哈 #68楼 2007-02-03 13:57 | @.net [未注册用户] 我用的是.net2005,网页用引用了prototype.js(1.4版的)文件,调试了上面给的列子,有的报错!! 比如: var CheckboxWatcher = Class.create(); //defining the rest of the class implementation CheckboxWatcher.prototype = { initialize: function(chkBox, message) { this.chkBox = $(chkBox); this.message = message; //assigning our method to the event this.chkBox.onclick = this.showMessage.bindAsEventListener(this); }, showMessage: function(evt) { alert(this.message + ' (' + evt.type + ')'); } }; var watcher = new CheckboxWatcher('myChk', 'Changed'); 报的错是‘class’未定义!! #69楼 2007-02-06 11:30 | bruce [未注册用户] 非常有帮助 谢谢 #70楼 2007-03-03 17:03 | kof [未注册用户] 问个问题: 中的这个each()是什么意思啊? 前面有几个函数都有 #71楼 2007-03-29 17:11 | redstone [未注册用户] 无标题文档 #72楼 2007-04-14 12:42 | 飞羽天翔 [未注册用户] 牛啊 ,感谢 #73楼 2007-04-17 13:14 | hehhe [未注册用户] 感谢,很不错! #74楼 2007-05-03 18:30 | ttt [未注册用户] 不错 #75楼 2007-05-10 20:20 | orichisonic [未注册用户] 我正在学习asp.net控件开发,也想加入你们的团队,我的msn是 orichisonic@hotmail.com #76楼 2007-05-11 11:38 | woshishui [未注册用户] 能不能提供一个prototype.js 1.4版的下载 网上都找不到 谢谢 #77楼 [TrackBack]2007-05-14 10:01 | T.Johnny 转至:http://www.cnblogs.com/thinhunan/archive/2006/04/01/DeveloperNotesForPrototype.htmlprototype.js是什... [引用提示]T.Johnny引用了该文章, 地址: http://www.cnblogs.com/Johnnytbz/archive/2007/05/14/745373.html #78楼 2007-05-16 11:05 | G_G [未注册用户] $H(a) 有没有 get(Key)什么方法吗? #79楼 2007-05-16 16:38 | Vic [未注册用户] 谢了,正需要这东西! #80楼 2007-05-18 10:12 | Java EE [未注册用户] 谢谢分享 "而且pre_1.5版现在也出来,不地改动不大。" 错了一个字,请改正. #81楼 2007-05-20 18:12 | mouse [未注册用户] 好东西.还没看完 收藏了 #82楼 2007-05-20 22:11 | MangoSoft [未注册用户] 支持!!!谢谢!! 这东东是什么呀,我怎么看不懂呀? #84楼 2007-05-26 13:07 | 才子 [未注册用户] 真的不错,谢谢!!! #85楼 2007-05-27 16:18 | bayin [未注册用户] 正需要,谢谢您的劳动以及奉献精神。 #86楼 2007-06-08 13:47 | 小户 [未注册用户] 太好了,收藏。 本人见过的 国内最好的 用 prototype js ajax web2.0 实现的站点 ( www.city366.com ) 谢谢,收藏了~~ #90楼 2007-06-19 10:34 | bafsdfsdf [未注册用户] #91楼 2007-07-06 09:01 | panty [未注册用户] 正想学习一下......谢谢你的劳动 #92楼 2007-07-12 17:28 | sugger [未注册用户] thank you ! 非常不错,支持你的工作! #97楼 2007-08-03 17:33 | 陈俊 [未注册用户] 学习一下! #98楼 [TrackBack]2007-08-08 10:26 | Kay 转载自:http://www.cnblogs.com/thinhunan/archive/2006/04/01/DeveloperNotesForPrototype.html prototype.j... [引用提示]Kay引用了该文章, 地址: http://www.cnblogs.com/kay/archive/2007/08/08/847437.html #99楼 2007-08-13 11:42 | 北大菜鸟 [未注册用户] 好东西啊! 真遗憾你没给我们上课 好东西,学习下 #101楼 2007-08-18 10:57 | hao123 [未注册用户] 我想提个问题,请帮忙 我用asp.net编写了两个页面,a.aspx和b.aspx,a.aspx是b.aspx页面的父页面。a.aspx.cs中有一个string变量musicUrl,b.aspx.cs中有一个string变量musicpath,我想在b.aspx页面中将musicpath的值赋给a.aspx.cs中的musicUrl。请我怎么弄。 我在b.aspx页面写了这个不行?: window.opener.document.musicUrl = musicpath prototype.js 1.4版开发者手册(强烈推荐) 一如其名,大部分都是基于prototype的。不过那些集合操作的调用方式应该可以用jx再简化。jx应该从改良这种framework开始。 [引用提示]watson hua引用了该文章, 地址: http://www.cnblogs.com/huazhihao/archive/2007/08/19/861991.html #103楼 2007-09-07 15:50 | 雾 [未注册用户] 问个问题 就是当div遇到下拉列表框的时候,下下拉列表框老在上面,有什么办法让他被div遮住啊 @雾 没有办法 你可以把div放在一个iframe中解决这个问题 好东西,学习下 正想学习一下......谢谢你的劳动 #107楼 [TrackBack]2007-09-11 10:48 | t-mac.NET 今天 Prototype.js 發佈了 1.6.0 Release Candidate 的消息(可至這裡下載),同時也說明 1.6 版會有怎樣的新功能。 [引用提示]t-mac.NET引用了该文章, 地址: http://www.cnblogs.com/T-MAC/archive/2007/09/08/Prototype_1-6_Release_Candidate.html 好东西,大家分享,谢谢LZ #109楼 2007-09-18 15:23 | KevinChu [未注册用户] 谢谢楼主,正在用。 Ajaxa 要学习一下 #111楼 2007-10-08 11:37 | vicvin [未注册用户] 我用prototype.js中Ajax.Request类来用Ajax时,如何从Action中取得从数据库查询的数据? 我表达的可能有一些问题,希望用过prototype.js的人回答,谢谢了 问题详细是这样的,我有一个模块的功能是修改信息,当我触发修改按钮后,会进入“function updateoffice” 我用这个函数来进行HTTP请求,请求到Action中,然后在进行相应的动作,最后把结果返回到页面上。 代码如下: function updateoffice(divid,officeid)//这个函数只是一部分 { var seldiv=divid; var officeid=officeid; //请求数据库,在Action:update中处理,并返回取得的数据,再显示修改框 var url = "/hr/office.do"; var pars = "method = updateGetOldDate&officeid="+officeid; new Ajax.Request(url,{method: 'get ', parameters: pars, onComplete: getOldDateResponse}); } 楼主,你太好了!我决定向你学习…… 今天看了一段js,不知所以然,上网查了查,看完之后才知道,也用了prototype.js和它类似的方法. 楼主太强了,这些天在学习JQuery,过些天也来好好学习Prototype一下~ 收集的太全面了,不过很多时候很多东西都用不上 #117楼 2007-11-21 13:30 | 甲骨文 [未注册用户] 楼主,你为什么会这么强? 1 一种完全免费的桌面式域名管理和动态域名解析(DDNS)等功能为一体的客户端软件的名称。花生壳客户端向用户提供全方位的桌面式域名管理以及动态域名解析服务。用户无需通过IE浏览器,直接通过客户端使用花生壳 广东网域花生壳http://Oray.gz.cn/ 上海贝锐科技http://Oray.sh.cn/ http://Oray.cn(很多花生壳销售骗子,购买时要小心,除了上海,广州,深圳的花生壳销售,其他的可能都是骗子,lz购买时要特别小心。最好事先给他们的陈剑打他手机跟他确认,小心上当) 所提供的各项服务,包括Oray护照注册、域名查询、域名管理、IP工具以及自诊断等各种服务;且通过树状结构方式可使用户对多达上百个域名进行方便管理,亦可自主添加二级域名,自由设置A记录(IP指向)、MX记录、CName(别名)、URL重定向等,用户操作界面清晰简单。 其实有很多人,在用这个了,只是你没有发现。前一阵子,我也研究了一下。不过,你还算不错的。 #121楼 2007-12-17 17:51 | Swell.wang [未注册用户] 我有个问题:我现在用 var url = '/jsp/Packing/PackingList.do'; var pars ='method=downPacking'; Ajax.Request(url,{method: 'post', parameters: pars, onComplete: showPage}); 处理了 我的数据 但是这个地方我没有返回任何东西。请问onComplete方法改怎么写? 也就是说我 只用他来完成某一功能但是并不对页面进行任何的改变。 上面介绍的大都是 有返回值的 并且返回 之后一般都要在页面上显示的 。。。 在线等=== 谢谢 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #123楼 2008-01-09 11:47 | 只会微软的我 [未注册用户] 我也只会微软技术,为什么不给我个MVP? #124楼 2008-01-09 18:12 | 虾米猪猪 [未注册用户] 我想知道哪里有这个的展示实例。 我想看一下效果。 #125楼 2008-01-29 22:34 | 啊啊阿 [未注册用户] 好东西,谢谢了,辛苦了 #126楼 2008-03-20 22:36 | 风情浪子 [未注册用户] 我今晚搞了两个多小时,解决了之前不能执行页面中的JS块的问题, 如果在服务端的页面中用这种方式引用脚本时,就不能执行, 要么写在页面中,还有一种就是包函在页面中的代码也会执行
这是我现在用的,可以正常使用, 但如果服务端不包函JS块,也可在

This text has a lot of links. Some are external and some are local
上面的代码仅仅是一点小小的实践让人爱上这种语法。请参看 Enumerable和Array的所有函数 prototype.js参考 JavaScript类扩展 prototype.js 类库实现强大功能的一种途径是扩展已有的JavaScript 类。 对 Object的扩展 Method Kind Arguments Description extend(destination, source) static destination: any object, source: any object 提供一种通过拷贝所有源以象属性和函数到目标函数实现继承的方法 inspect(targetObj) static targetObj: any object 返回可读性好关于目标对象的文字描述,如果对象实例没有定义一个inspect函数,默认返回toString函数的值。 对Number的扩展 Method Kind Arguments Description toColorPart() instance (none) 返回数字的十六进制表示形式。在把一个RGB数字转换成HTML表现形式时很有用。 succ() instance (none) 返回下一个数字,这个方法可用于迭代调用场景中。 times(iterator) instance iterator: a function object conforming to Function(index) Calls the iteratorfunction repeatedly passing the current index in the indexargument. 反复调用iterator函数并传递当前index到iterator的index参数。 下面的例子用提示框显示0-9。 对 Function扩展 Method Kind Arguments Description bind(object) instance object: the object that owns the method 返回function的实例,这个实例和源function的结构一样,但是它已被绑定给了参数中提供的object,就是说,function中的this指针指向参数object。 bindAsEventListener(object) instance object: the object that owns the method 用法和上面的bind一样,区别在于用来绑定事件。 让我们看看如何运用这些扩展。 Test? 对String的扩展 Method Kind Arguments Description stripTags() instance (none) 返回一个把所有的HTML或XML标记都移除的字符串。 stripScripts() instance (none) 返回一个把所有的script都移除的字符串。 escapeHTML() instance (none) 返回一个把所有的HTML标记合适的转义掉的字符串。 unescapeHTML() instance (none) escapeHTML()的反转。 extractScripts() instance (none) 返回一个包含在string中找到的所有 在prototype.js中定义新的对象和类 另一个这个程序包帮助你的地方就是提供许多既支持面向对象设计理念又有共通功能的许多对象。 The PeriodicalExecuter object 这个对象提供一定间隔时间上重复调用一个方法的逻辑。 Method Kind Arguments Description [ctor](callback, interval) constructor callback: a parameterless function, interval: number of seconds 创建这个对象的实例将会重复调用给定的方法。 Property Type Description callback Function() 被调用的方法,该方法不能传入参数。 frequency Number 以秒为单位的间隔。 currentlyExecuting Boolean 表示这个方法是否正在执行。 The Prototype object Prototype没有太重要的作用,只是声明了该程序包的版本 。 Property Type Description Version String 版本。 emptyFunction Function() 空函数。 K Function(obj) 一个仅仅回传参数的函数。 ScriptFragment String 识别script的正则式。 The Enumerable object Enumberable对象能够已更优雅的方式实现对列表样式的结构进行枚举。 很多其它的对象通过扩展自Enumberable对象来得到这些有用的接口。 Method Kind Arguments Description each(iterator) instance iterator: a function object conforming to Function(value, index) 把每个element做为第一个参数,element的index作为第一个参数调用iterator函数。 all([iterator]) instance iterator: a function object conforming to Function(value, index) 这个函数会用给出的iterator测试整个集合,如果集合中任一元素在iterator函数测试中返回false或null,那么这个函数返回false,否则返回true。如果没有给出iterator,那么就会测试所有的元素是不是不等于false和null。你可以简单的把它看成是“检测每个元素都为非空非负”。 any(iterator) instance iterator: a function object conforming to Function(value, index), optional. 这个函数会用给出的iterator测试整个集合,如果集合中任一元素在iterator函数测试中返回true,那么这个函数返回true,否则返回false。如果没有给出iterator,那么就会测试所有的元素是不是有一个不等于false和null。你可以简单的把它看成是“检测元素中是不是有非空非负的”。 collect(iterator) instance iterator: a function object conforming to Function(value, index) 调用iterator函数根据集合中每个元素返回一个结果,然后按照原来集合中的顺序,返回一个Array。 detect(iterator) instance iterator: a function object conforming to Function(value, index) 集合中每个元素调用一次Iterator,返回第一个使Iterator返回True的元素,如果最终都没有为true的调用,那么返回null。 entries() instance (none) 等于toArray() . find(iterator) instance iterator: a function object conforming to Function(value, index) 等于 detect(). findAll(iterator) instance iterator: a function object conforming to Function(value, index) 集合中每个元素调用Iterator,返回一个由所有调用Iterator返回结果等于true的元素组成的数组。和reject()相反。 grep(pattern [, iterator]) instance pattern: a RegExp object used to match the elements, iterator: a function object conforming to Function(value, index) 用pattern参数正则表达式测试集合中的每个元素,返回一个包含所有匹配正则式的元素的Array,如果给出了Iterator,那个每个结果还要经过一下Iterator处理。 include(obj) instance obj: any object 判断集合中包不包含指定对象。 inject(initialValue, iterator) instance initialValue: any object to be used as the initial value, iterator: a function object conforming to Function(accumulator, value, index) 用Iterator联接所有集合中的元素。Iterator在被调用时把上一次迭代的结果做为第一个参数传给accumulator。第一次迭代时,accurmelator等于initialValue,最后返回accumulator的值。 invoke(methodName [, arg1 [, arg2 [...]]]) instance methodName: name of the method that will be called in each element, arg1..argN: arguments that will be passed in the method invocation. 集合中的每个元素调用指定的函数(查看源代码可以发现指定函数被调用时,this指针被传成当前元素),并传入给出的参数,返回调用结果组成的Array。 map(iterator) instance iterator: a function object conforming to Function(value, index) 同collect() . max([iterator]) instance iterator: a function object conforming to Function(value, index) 返回集合中元素的最大值,或调用Iterator后返回值的最大值(如果给出了Iterator的话)。 member(obj) instance obj: any object 同 include(). min([iterator]) instance iterator: a function object conforming to Function(value, index) 返回最小值,参见max()。 partition([iterator]) instance iterator: a function object conforming to Function(value, index) 返回一个包含两个Array的Array,第一个Array包含所有调用Iterator返回True的元素,第二个Array包含剩下的元素。如果Iterator没有给出,那么就根据元素本身判断。 pluck(propertyName) instance propertyName name of the property that will be read from each element. This can also contain the index of the element 返回每个元素的指定属性名的属性的值组成的Array。 reject(iterator) instance iterator: a function object conforming to Function(value, index) 和 findAll()相反(返回所有等于false的元素). select(iterator) instance iterator: a function object conforming to Function(value, index) 同 findAll(). sortBy(iterator) instance iterator: a function object conforming to Function(value, index) 根据每个元素调用Iterator返回的值进行排序返回一个Array。 toArray() instance (none) 返回由集合所有元素组成的一个Array。 zip(collection1[, collection2 [, ... collectionN [,transform]]]) instance collection1 .. collectionN: enumerations that will be merged, transform: a function object conforming to Function(value, index) 合并每个给出的集合到当前集合。合并操作返回一个新的array,这个array的元素个数和原集合的元素个数一样,这个array的每个元素又是一个子array,它合并了所有集合中相同index的元素。如果transform函数被指定,那么array的每个元素还会调用transform函数先做处理。举个例子: [1,2,3].zip([4,5,6], [7,8,9]).inspect() 返回 "[ [1,4,7],[2,5,8],[3,6,9] ]" The Hash object Hash对象实现一种Hash结构,也就是一个Key:Value对的集合。 Hash中的每个Item是一个有两个元素的array,前一个是Key,后一个是Value,每个Item也有两个不需加以说明的属性,key和value。 Method Kind Arguments Description keys() instance (none) 返回所有Item的key的集合的一个array。 values() instance (none) 返回所有Item的value的集合的一个array。 merge(otherHash) instance otherHash: Hash object 合并给出的Hash,返回一个新Hash。 toQueryString() instance (none) 以QueryString那样的样式返回hash中所有的item,例如: 'key1=value1&key2=value2&key3=value3' inspect() instance (none) 用一种合适的方法显示hash中的key:value对。 The ObjectRange class 继承自 Enumerable 用上、下边界描述一个对象区域。 Property Type Kind Description start (any) instance range的下边界 end (any) instance range的上边界 exclusive Boolean instance 决定边界自身是不是range的一部分。 Method Kind Arguments Description [ctor](start, end, exclusive) constructor start: the lower bound, end: the upper bound, exclusive: include the bounds in the range? 创建一个range对象,从start生成到end,这里要注意的是,start和end必段类型一致,而且该类型要有succ()方法。 include(searchedValue) instance searchedValue: value that we are looking for 检查一个value是不是在range中。 The Class object 在这个程序包中 Class对象在声明其他的类时候被用到 。用这个对象声明类使得新类支持 initialize()方法,他起构造方法的作用。 看下面的例子 //declaring the class var MySampleClass = Class.create(); //defining the rest of the class implmentation MySampleClass.prototype = { initialize: function(message) { this.message = message; }, showMessage: function(ajaxResponse) { alert(this.message); } }; //now, let's instantiate and use one object var myTalker = new MySampleClass('hi there.'); myTalker.showMessage(); //displays alert Method Kind Arguments Description create(*) instance (any) 定义新类的构造方法。 The Ajax object 这个对象被用作其他提供AJAX功能的类的根对象。 Property Type Kind Description activeRequestCount Number instance 正在处理中的Ajax请求的个数。 Method Kind Arguments Description getTransport() instance (none) 返回新的XMLHttpRequest对象。 The Ajax.Responders object 继承自 Enumerable 这个对象维持一个在Ajax相关事件发生时将被调用的对象的列表。比如,你要设置一个全局钩子来处理Ajax操作异常,那么你就可以使用这个对象。 Property Type Kind Description responders Array instance 被注册到Ajax事件通知的对象列表。 Method Kind Arguments Description register(responderToAdd) instance responderToAdd: object with methods that will be called. 被传入参数的对象应包含名如Ajax事件的系列方法(如onCreate,onComplete,onException)。通讯事件引发所有被注册的对象的合适名称的函数被调用。 unregister(responderToRemove) instance responderToRemove: object to be removed from the list. 从列表中移除。 dispatch(callback, request, transport, json) instance callback: name of the AJAX event being reported, request: the Ajax.Request object responsible for the event, transport: the XMLHttpRequest object that carried (or is carrying) the AJAX call, json: the X-JSON header of the response (if present) 遍历被注册的对象列表,找出有由callback参数决定的那个函数的对象。然后向这些函数传递其它的三个参数,如果Ajax响应中包含一个含有JSON内容的X-JSON HTTP头,那么它会被热行并传入json参数。如果事件是onException,那么transport参数会被异常代替,json不会传递。 The Ajax.Base class 这个类是其他在Ajax对象中定义的类的基类。 Method Kind Arguments Description setOptions(options) instance options: AJAX options 设定AJAX操作想要的选项。 responseIsSuccess() instance (none) 返回 true如果AJAX操作成功,否则为 false。 responseIsFailure() instance (none) 与 responseIsSuccess()相反。 The Ajax.Request class 继承自 Ajax.Base 封装 AJAX 操作 Property Type Kind Description Events Array static 在AJAX操作中所有可能报告的事件/状态的列表。这个列表包括: 'Uninitialized', 'Loading', 'Loaded', 'Interactive', 和 'Complete'。 transport XMLHttpRequest instance 承载AJAX操作的 XMLHttpRequest对象。 url string instance 请求的URL。 Method Kind Arguments Description [ctor](url, options) constructor url: the url to be fetched, options: AJAX options 创建这个对象的一个实例,它将在给定的选项下请求url。onCreate事件在调用constructor事被激发。 重要:如果选择的url受到浏览器的安全设置,他会一点作用也不起。 很多情况下,浏览器不会请求与当前页面不同主机(域名)的url。 你最好只使用本地url来避免限制用户配置他们的浏览器(谢谢Clay) evalJSON() instance (none) 这个方法显然不会被外部调用。它在Ajax响应中含有X-JSON HTTP头时用于内部调用执行这些内容。 evalReponse() instance (none) 这也方法显然不会被外部调用,如果Ajax响应含有一个值为text/javascript的Cotent-Type头,那么这个方法就用被调用执行响应体。 header(name) instance name: HTTP header name 引用Ajax响应的头的内容,在Ajax访问结束后再调用这个方法。 onStateChange() instance (none) 这个方法通常不会被外部调用。 当AJAX请求状态改变的时候被这个对象自己调用。 request(url) instance url: url for the AJAX call 这个方法通常不会被外部调用。已经在构造方法中调用了。 respondToReadyState(readyState) instance readyState: state number (1 to 4) 这个方法通常不会被外部调用。 当AJAX请求状态改变的时候被这个对象自己调用。 setRequestHeaders() instance (none) 这个方法通常不会被外部调用。 被这个对象自己调用来配置在HTTP请求要发送的HTTP报头。 The options argument object An important part of the AJAX operations is the optionsargument. There's no optionsclass per se. Any object can be passed, as long as it has the expected properties. It is common to create anonymous objects just for the AJAX calls. Property Type Default Description method String 'post' HTTP 请求方式。 parameters String ' 在HTTP请求中传入的url格式的值列表。 asynchronous Boolean true 指定是否做异步 AJAX 请求。 postBody String undefined 在HTTP POST的情况下,传入请求体中的内容。 requestHeaders Array undefined 和请求一起被传入的HTTP头部列表, 这个列表必须含有偶数个项目, 任何奇数项目是自定义的头部的名称, 接下来的偶数项目使这个头部项目的字符串值。 例子:['my-header1', 'this is the value', 'my-other-header', 'another value'] onXXXXXXXX Function(XMLHttpRequest, Object) undefined 在AJAX请求中,当相应的事件/状态形成的时候调用的自定义方法。 例如 var myOpts = {onComplete: showResponse, onLoaded: registerLoaded};. 这个方法将被传入一个参数, 这个参数是承载AJAX操作的 XMLHttpRequest对象,另一个是包含被执行X-JSON响应HTTP头。 onSuccess Function(XMLHttpRequest, Object) undefined 当AJAX请求成功完成的时候调用的自定义方法。 这个方法将被传入一个参数, 这个参数是承载AJAX操作的 XMLHttpRequest对象,另一个是包含被执行X-JSON响应HTTP头。 onFailure Function(XMLHttpRequest, Object) undefined 当AJAX请求完成但出现错误的时候调用的自定义方法。这个方法将被传入一个参数, 这个参数是承载AJAX操作的 XMLHttpRequest对象,另一个是包含被执行X-JSON响应HTTP头。 onException Function(Ajax.Request, exception) undefined 当一个在客户端执行的Ajax发生像无效响应或无效参数这样的异常情况时被调用的自定义函数。它收到两个参数,包含异常Ajax操作的Ajax.Request对象和异常对象。 insertion an Insertion class undefined 一个能决定怎么样插入新内容的类,能 Insertion.Before, Insertion.Top, Insertion.Bottom, 或 Insertion.After. 只能应用于Ajax.Updater对象. evalScripts Boolean undefined, false 决定当响应到达的时候是否执行其中的脚本块,只在 Ajax.Updater对象中应用。 decay Number undefined, 1 决定当最后一次响应和前一次响应相同时在 Ajax.PeriodicalUpdater对象中的减漫访问的次数, 例如,如果设为2,后来的刷新和之前的结果一样, 这个对象将等待2个设定的时间间隔进行下一次刷新, 如果又一次一样, 那么将等待4次,等等。 不设定这个只,或者设置为1,将避免访问频率变慢。 frequency Number undefined, 2 用秒表示的刷新间的间隔,只能应用于 Ajax.PeriodicalUpdater 对象。 The Ajax.Updater class 继承自 Ajax.Request 当请求的url返回一段HTML而你想把它直接放置到页面中一个特定的元素的时候被用到。 如果url的返回 将把 HTML 变为 Hello, Chief Wiggum. How's it going? The Insertion.Top class 继承自 Abstract.Insertion 在给定元素第一个子节点位置插入 HTML。内容将位于元素的开始标记的紧后面。 Method Kind Arguments Description [ctor](element, content) constructor element: element object or id, content: HTML to be inserted 继承自 Abstract.Insertion. 创建一个可以帮助插入动态内容的对象。 下面的代码 Hello, Wiggum. How's it going? 将把 HTML 变为 Hello, Mr. Wiggum. How's it going? The Insertion.Bottom class Inherits from Abstract.Insertion 在给定元素最后一个子节点位置插入 HTML。内容将位于元素的结束标记的紧前面。 Method Kind Arguments Description [ctor](element, content) constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion. Creates an object that will help with dynamic content insertion. The following code Hello, Wiggum. How's it going? Will change the HTML to Hello, Wiggum. How's it going?What's up? The Insertion.After class Inherits from Abstract.Insertion 在给定元素结束标记的后面插入HTML。 Method Kind Arguments Description [ctor](element, content) constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion. Creates an object that will help with dynamic content insertion. The following code Hello, Wiggum. How's it going? Will change the HTML to Hello, Wiggum. How's it going?Are you there? The Field object 这个对象提供操作表单中的输入项目的功能性方法。 Method Kind Arguments Description clear(field1 [, field2 [, field3 [...]]]) instance fieldN: field element object or id 清除传入表单中项目元素的值。 present(field1 [, field2 [, field3 [...]]]) instance fieldN: field element object or id 只有在所有的表单项目都不为空时返回 true。 focus(field) instance field: field element object or id 移动焦点到给定的表单项目。 select(field) instance field: field element object or id 选择支持项目值选择的表单项目的值。 activate(field) instance field: field element object or id 移动焦点并且选择支持项目值选择的表单项目的值。 The Form object 这个对象提供操作表单和他们的输入元素的功能性方法。 Method Kind Arguments Description serialize(form) instance form: form element object or id 返回url参数格式的项目名和值的列表, 如'field1=value1&field2=value2&field3=value3'。 findFirstElement(form) instance form: form element object or id 返回Form中第一个Enable的对象。 getElements(form) instance form: form element object or id 返回包含所有在表单中输入项目的 Array对象。 getInputs(form [, typeName [, name]]) instance form: form element object or id, typeName: the type of the input element, name: the name of the input element. 返回一个 Array包含所有在表单中的 元素。 另外, 这个列表可以对元素的类型或名字属性进行过滤。 disable(form) instance form: form element object or id 使表单中的所有输入项目无效。 enable(form) instance form: form element object or id 使表单中的所有输入项目有效。 focusFirstElement(form) instance form: form element object or id 激活第一个表单中可视的,有效的输入项目。 reset(form) instance form: form element object or id 重置表单。和调用表单对象的 reset()方法一样。 The Form.Element object 这个对象提供表单对象中的可视和非可视元素的功能性方法。 Method Kind Arguments Description serialize(element) instance element: element object or id 返回元素的 名称=值 对, 如 'elementName=elementValue'。 getValue(element) instance element: element object or id 返回元素的值。 The Form.Element.Serializers object 这个对象提供了内部使用的用来协助解析出表单元素的当前值的一些有用的方法。 Method Kind Arguments Description inputSelector(element) instance element: object or id of a form element that has the checkedproperty, like a radio button or checkbox. 返回带有元素名称和值的 Array, 如 ['elementName', 'elementValue'] textarea(element) instance element: object or id of a form element that has the valueproperty, like a textbox, button or password field. 返回带有元素名称和值的 Array, 如 ['elementName', 'elementValue'] select(element) instance element: object of a