您的位置:首页 > Web前端 > JavaScript

prototype.js1.4版开发者手册(强烈推荐)

2008-12-22 16:55 531 查看


  prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值,所以我强烈建议B/S开发人员和对JS开发感兴趣的朋友去浏览一些它的源代码,其中有很多的珠玑,你绝对会觉得读它的源代码是一种享受。
Prototype.js1.4中文使用手册PDF版下载

prototype.js是什么?

万一你没有使用过大名鼎鼎的prototype.js,那么让我来告诉你,prototype.js是由SamStephenson写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。

如果你最近尝试使用它,你大概了解到文档并不是作者的一个强项。和在我以前使用这个类库的不少开发者一样,一开始,我不得不一头扎进阅读prototype.js的源代码和实验它的功能中。我想,在我学习完它之后,把我学到的东西分享给大家是件不错的事。

同时,在本文中,我也将提供一个关于这个类库提供的objects,classes,functions,extensions这对东东的非官方参考

在阅读这个文档时,熟悉Ruby的开发者将会注意到Ruby的一些内建类和本类库扩展实现之间非常相似。

相关文章

AdvancedJavaScriptguide.

一些实用的函数

这个类库带有很多预定义的对象和实用函数,这些东东的目的显然是把你从一些重复的打字中解放出来。

使用$()方法

$()方法是在DOM中使用过于频繁的document.getElementById()方法的一个便利的简写,就像这个DOM方法一样,这个方法返回参数传入的id的那个元素。

比起DOM中的方法,这个更胜一筹。你可以传入多个id作为参数然后$()返回一个带有所有要求的元素的一个Array对象。

<HTML>

<HEAD>

<TITLE>TestPage</TITLE>

<scriptsrc="prototype-1.3.1.js"></script>

<script>

functiontest1()

{

vard=$('myDiv');

alert(d.innerHTML);

}

functiontest2()

{

vardivs=$('myDiv','myOtherDiv');

for(i=0;i<divs.length;i++)

{

alert(divs[i].innerHTML);

}

}

</script>

</HEAD>

<BODY>

<divid="myDiv">

<p>Thisisaparagraph</p>

</div>

<divid="myOtherDiv">

<p>Thisisanotherparagraph</p>

</div>

<inputtype="button"value=Test1onclick="test1();"><br>

<inputtype="button"value=Test2onclick="test2();"><br>

</BODY>

</HTML>

另外一个好处是,这个函数能传入用string表示的对象ID,也可以传入对象本身,这样,在建立其它能传两种类型的参数的函数时非常有用。

使用$F()函数

$F()函数是另一个大收欢迎的“快捷键”,它能用于返回任何表单输入控件的值,比如textbox,drop-downlist。这个方法也能用元素id或元素本身做为参数。

<script>

functiontest3()

{

alert($F('userName'));

}

</script>

<inputtype="text"id="userName"value="JoeDoe"><br>

<inputtype="button"value=Test3onclick="test3();"><br>


使用$A()函数

$A()函数能把它接收到的单个的参数转换成一个Array对象。

这个方法,结合被本类库扩展了的Array类,能方便的把任何的可枚举列表转换成或拷贝到一个Array对象。一个推荐的用法就是把DOMNodeLists转换成一个普通的Array对象,从而更有效率的进行遍历,请看下面的例子。

<script>

functionshowOptions(){

varsomeNodeList=$('lstEmployees').getElementsByTagName('option');

varnodes=$A(someNodeList);

nodes.each(function(node){

alert(node.nodeName+':'+node.innerHTML);

});

}

</script>

<selectid="lstEmployees"size="10">

<optionvalue="5">Buchanan,Steven</option>

<optionvalue="8">Callahan,Laura</option>

<optionvalue="1">Davolio,Nancy</option>

</select>

<inputtype="button"value="Showtheoptions"onclick="showOptions();">



使用$H()函数

$H()函数把一些对象转换成一个可枚举的和联合数组类似的Hash对象。

<script>

functiontestHash()

{

//let'screatetheobject

vara={

first:10,

second:20,

third:30

};

//nowtransformitintoahash

varh=$H(a);

alert(h.toQueryString());//displays:first=10&second=20&third=30

}

</script>



使用$R()函数

$R()是newObjectRange(lowBound,upperBound,excludeBounds)的缩写。

跳到ObjectRange类文档可以看到一个关于此类的完整描述.此时,我们还是先来看一个例子以展示这个缩写能代替哪些方法吧。其它相关的一些知识可以在Enumerable对象文档中找到。

<script>

functiondemoDollar_R(){

varrange=$R(10,20,false);

range.each(function(value,index){

alert(value);

});

}

</script>

<inputtype="button"value="SampleCount"onclick="demoDollar_R();">



使用Try.these()函数

Try.these()方法使得实现当你想调用不同的方法直到其中的一个成功正常的这种需求变得非常容易,他把一系列的方法作为参数并且按顺序的一个一个的执行这些方法直到其中的一个成功执行,返回成功执行的那个方法的返回值。

在下面的例子中,xmlNode.text在一些浏览器中好用,但是xmlNode.textContent在另一些浏览器中正常工作。使用Try.these()方法我们可以得到正常工作的那个方法的返回值。

<script>
functiongetXmlNodeValue(xmlNode){
returnTry.these(
function(){returnxmlNode.text;},
function(){returnxmlNode.textContent;)
);
}
</script>

Ajax对象

上面提到的共通方法非常好,但是面对它吧,它们不是最高级的那类东西。它们是吗?你很可能自己编写了这些甚至在你的脚本里面有类似功能的方法。但是这些方法只是冰山一角。

我很肯定你对prototype.js感兴趣的原因很可能是由于它的AJAX能力。所以让我们解释当你需要完成AJAX逻辑的时候,这个包如何让它更容易。

Ajax对象是一个预定义对象,由这个包创建,为了封装和简化编写AJAX功能涉及的狡猾的代码。这个对象包含一系列的封装AJAX逻辑的类。我们来看看其中几个类。

使用Ajax.Request类

如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建XMLHttpRequest对象并且异步的跟踪它的进程,然后解析出响应然后处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。

为了支持AJAX功能。这个包定义了Ajax.Request类。

假如你有一个应用程序可以通过urlhttp://yoursever/app/get_sales?empID=1234&year=1998与服务器通信。它返回下面这样的XML响应。

<?xmlversion="1.0"encoding="utf-8"?>

<ajax-response>

<responsetype="object"id="productDetails">

<monthly-sales>

<employee-sales>

<employee-id>1234</employee-id>

<year-month>1998-01</year-month>

<sales>$8,115.36</sales>

</employee-sales>

<employee-sales>

<employee-id>1234</employee-id>

<year-month>1998-02</year-month>

<sales>$11,147.51</sales>

</employee-sales>

</monthly-sales>

</response>

</ajax-response>


用Ajax.Request对象和服务器通信并且得到这段XML是非常简单的。下面的例子演示了它是如何完成的。

<script>

functionsearchSales()

{

varempID=$F('lstEmployees');

vary=$F('lstYears');

varurl='http://yoursever/app/get_sales';

varpars='empID='+empID+'&year='+y;

varmyAjax=newAjax.Request(
url,
{
method:'get',
parameters:pars,
onComplete:showResponse
});

}
functionshowResponse(originalRequest)
{
//putreturnedXMLinthetextarea
$('result').value=originalRequest.responseText;
}
</script>
<selectid="lstEmployees"size="10"onchange="searchSales()">
<optionvalue="5">Buchanan,Steven</option>
<optionvalue="8">Callahan,Laura</option>
<optionvalue="1">Davolio,Nancy</option>
</select>
<selectid="lstYears"size="3"onchange="searchSales()">
<optionselected="selected"value="1996">1996</option>
<optionvalue="1997">1997</option>
<optionvalue="1998">1998</option>
</select>
<br><textareaid=resultcols=60rows=10></textarea>

你注意到传入Ajax.Request构造方法的第二个对象了吗?参数{method:'get',parameters:pars,onComplete:showResponse}表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为method值为'get'的属性,另一个属性名为parameters包含HTTP请求的查询字符串,和一个onComplete属性/方法包含函数showResponse。

还有一些其它的属性可以在这个对象里面定义和设置,如asynchronous,可以为true或false来决定AJAX对服务器的调用是否是异步的(默认值是true)。

这个参数定义AJAX调用的选项。在我们的例子中,在第一个参数通过HTTPGET命令请求那个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来做到,其中一个在第一个调用开始时显示图标,另一个在最后一个调用完成时隐藏图标。看下面的例子。

<script>

varmyGlobalHandlers={

onCreate:function(){

Element.show('systemWorking');

},

onComplete:function(){

if(Ajax.activeRequestCount==0){

Element.hide('systemWorking');

}

}

};

Ajax.Responders.register(myGlobalHandlers);
</script>
<divid='systemWorking'><imgsrc='spinner.gif'>Loading...</div>

更完全的解释,请参照Ajax.Request参考和Ajax选项参考。

使用Ajax.Updater类

如果你的服务器的另一端返回的信息已经是HTML了,那么使用这个程序包中Ajax.Updater类将使你的生活变得更加得容易。用它你只需提供哪一个元素需要被AJAX请求返回的HTML填充就可以了,例子比我写说明的更清楚。

<script>

functiongetHTML()

{

varurl='http://yourserver/app/getSomeHTML';

varpars='someParameter=ABC';

varmyAjax=newAjax.Updater(
'placeholder',
url,
{
method:'get',
parameters:pars
});

}
</script>
<inputtype=buttonvalue=GetHtmlonclick="getHTML()">
<divid="placeholder"></div>

你可以看到,这段代码比前面的例子更加简洁,不包括onComplete方法,但是在构造方法中传入了一个元素id。我们来稍稍修改一下代码来描述如何在客户端处理服务器段错误成为可能。

我们将加入更多的选项,指定处理错误的一个方法。这个是用onFailure选项来完成的。我们也指定了一个placeholder只有在成功请求之后才会被填充。为了完成这个目的我们修改了第一个参数从一个简单的元素id到一个带有两个属性的对象,success(一切OK的时候被用到)和failure(有地方出问题的时候被用到)在下面的例子中没有用到failure属性,而仅仅在onFailure处使用了reportError方法。

<script>
functiongetHTML()
{
varurl='http://yourserver/app/getSomeHTML';
varpars='someParameter=ABC';


varmyAjax=newAjax.Updater(
{success:'placeholder'},
url,
{
method:'get',
parameters:pars,
onFailure:reportError
});

}
functionreportError(request)
{
alert('Sorry.Therewasanerror.');
}
</script>
<inputtype=buttonvalue=GetHtmlonclick="getHTML()">
<divid="placeholder"></div>

如果你的服务器逻辑是连同HTML标记返回JavaScript代码,Ajax.Updater对象可以执行那段JavaScript代码。为了使这个对象对待响应为JavaScript,你只需在最后参数的对象构造方法中简单加入evalScripts:true属性。但是值得提醒的是,像这个选项名evalScripts暗示的,这些脚本会被执行,但是它们不会被加入到Page的脚本中。“有什么区别?”,可能你会这样问。我们假定请求地址返回的东东像这样:

<scriptlanguage="javascript"type="text/javascript">

functionsayHi(){

alert('Hi');

}

</script>

<inputtype=buttonvalue="ClickMe"onclick="sayHi()">


如果你以前这样尝试过,你知道这些脚本不会如你所期望的那样工作,原因是这段脚本会被执行,但像上面这样的脚本执行并不会创建一个名叫sayHi的函数,它什么也不做。如果要创建一个函数,我们应当把代码改成下面这个样子:

<scriptlanguage="javascript"type="text/javascript">

sayHi=function(){

alert('Hi');

};
</script>
<inputtype=buttonvalue="ClickMe"onclick="sayHi()">

为什么我们在上面的代码中不使用var关键字来声明这个变量呢(指sayHi),因为那样做创建出来的函数将只是当前脚本块的一个局部变量(至少在IE中是这样)。不写var关键字,创建出来的对象的作用域就是我们所期望的window。

更多相关知识,请参看Ajax.Updaterreference和optionsreference.

枚举...噢!噢!

你知道,我们都是这样来做循环的,建一个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显示出来,你可以像下面代码这样写得很好:

<script>

functionshowList(){

varsimpsons=['Homer','Marge','Lisa','Bart','Meg'];

for(i=0;i<simpsons.length;i++){

alert(simpsons[i]);

}
}
</script>
<inputtype="button"value="ShowList"onclick="showList();">

使用我们新的最好的朋友,prototype.js,我们可以把它生写成这样

functionshowList(){

varsimpsons=['Homer','Marge','Lisa','Bart','Meg'];

simpsons.each(function(familyMember){

alert(familyMember);

});
}

你可能会想“非常奇怪的方式...相对旧的,这种语法太怪异了”。哦,在上面的例子,确实什么也没有,在这个简单得要死例子中,也没有改变太多啊,尽管如此,请继续读下去。

在继续下面内容之前,你注意到那个被做为一个参数传递给each函数的函数?我们把它理解成迭代器函数。

Yourarraysonsteroids

就如我们上面提到的,把你的Array中的elements当成相同的类型使用相同的属性和函数是很通用(Common,不知该翻译成通用还是庸俗)的。让我们看看怎么样利用我们新的马力强劲的Arrays的迭代功能吧。

依照标准找到一个element。

<script>

functionfindEmployeeById(emp_id){

varlistBox=$('lstEmployees')

varoptions=listBox.getElementsByTagName('option');

options=$A(options);

varopt=options.find(function(employee){

return(employee.value==emp_id);

}
);

alert(opt.innerHTML);//displaystheemployeename

}

</script>

<selectid="lstEmployees"size="10">

<optionvalue="5">Buchanan,Steven</option>

<optionvalue="8">Callahan,Laura</option>

<optionvalue="1">Davolio,Nancy</option>

</select>

<inputtype="button"value="FindLaura"onclick="findEmployeeById(8);">


现在我们再下一城,看看如何过滤一个Array中的元素,从每个元素中得到我们想要的成员。

<script>

functionshowLocalLinks(paragraph){

paragraph=$(paragraph);

varlinks=$A(paragraph.getElementsByTagName('a'));

//findlinksthatdonotstartwith'http'

varlocalLinks=links.findAll(function(link){

varstart=link.href.substring(0,4);

returnstart!='http';

});

//nowthelinktexts

vartexts=localLinks.pluck('innerHTML');

//gettheminasinglestring

varresult=texts.inspect();

alert(result);

}

</script>

<pid="someText">

This<ahref="http://othersite.com/page.html">text</a>has

a<ahref="#localAnchor">lot</a>of

<ahref="#otherAnchor">links</a>.Someare

<ahref="http://wherever.com/page.html">external</a>

andsomeare<ahref="#someAnchor">local</a>

</p>

<inputtype=buttonvalue="FindLocalLinks"onclick="showLocalLinks('someText')">


上面的代码仅仅是一点小小的实践让人爱上这种语法。请参看Enumerable和Array的所有函数

prototype.js参考

JavaScript类扩展

prototype.js类库实现强大功能的一种途径是扩展已有的JavaScript类。

对Object的扩展

MethodKindArgumentsDescription
extend(destination,source)staticdestination:anyobject,source:anyobject提供一种通过拷贝所有源以象属性和函数到目标函数实现继承的方法
inspect(targetObj)statictargetObj:anyobject返回可读性好关于目标对象的文字描述,如果对象实例没有定义一个inspect函数,默认返回toString函数的值。

对Number的扩展

MethodKindArgumentsDescription
toColorPart()instance(none)返回数字的十六进制表示形式。在把一个RGB数字转换成HTML表现形式时很有用。
succ()instance(none)返回下一个数字,这个方法可用于迭代调用场景中。
times(iterator)instanceiterator:afunctionobjectconformingtoFunction(index)Callstheiteratorfunctionrepeatedlypassingthecurrentindexintheindexargument.反复调用iterator函数并传递当前index到iterator的index参数。
下面的例子用提示框显示0-9。

<script>

functiondemoTimes(){

varn=10;

n.times(function(index){

alert(index);

});

/***************************

*youcouldhavealsoused:

*(10).times(....);

***************************/

}

</script>

<inputtype=buttonvalue="TestNumber.times()"onclick="demoTimes()">



对Function扩展

MethodKindArgumentsDescription
bind(object)instanceobject:theobjectthatownsthemethod返回function的实例,这个实例和源function的结构一样,但是它已被绑定给了参数中提供的object,就是说,function中的this指针指向参数object。
bindAsEventListener(object)instanceobject:theobjectthatownsthemethod用法和上面的bind一样,区别在于用来绑定事件。
让我们看看如何运用这些扩展。

<inputtype=checkboxid=myChkvalue=1>Test?

<script>

//declaringtheclass

varCheckboxWatcher=Class.create();

//definingtherestoftheclassimplementation

CheckboxWatcher.prototype={

initialize:function(chkBox,message){

this.chkBox=$(chkBox);

this.message=message;

//assigningourmethodtotheevent

this.chkBox.onclick=
this.showMessage.bindAsEventListener(this);

},
showMessage:function(evt){
alert(this.message+'('+evt.type+')');
}
};
varwatcher=newCheckboxWatcher('myChk','Changed');
</script>


对String的扩展

MethodKindArgumentsDescription
stripTags()instance(none)返回一个把所有的HTML或XML标记都移除的字符串。
stripScripts()instance(none)返回一个把所有的script都移除的字符串。
escapeHTML()instance(none)返回一个把所有的HTML标记合适的转义掉的字符串。
unescapeHTML()instance(none)escapeHTML()的反转。
extractScripts()instance(none)返回一个包含在string中找到的所有<script>的数组。
evalScripts()instance(none)执行在string中找到的所有<script>。
toQueryParams()instance(none)把querystring分割才一个用parametername做index的联合Array,更像一个hash。
parseQuery()instance(none)和toQueryParams()一样.
toArray()instance(none)把字符串转换成字符数组.
camelize()instance(none)转换一个以连字符连接的字符串成一个骆驼法样式的字符串。比如,这个函数在写代码时,把它做为一个样式工具使用是很有用的。

对Array的扩展

因为array扩展于enumerable,所以所有enumberable对象的函数,array都是可以使用的,除此之外,下面的这些也是已经实现了的。

MethodKindArgumentsDescription
clear()instance(none)清空。
compact()instance(none)返回一个不包括源array中null或undefined元素的array,此方法不改变源array。
first()instance(none)返回array的第一个对象。
flatten()instance(none)通过递归组合array每个元素的子元素(如果该元素也是array)来返回一个“扁平的”一维的array。
indexOf(value)instancevalue:whatyouarelookingfor.返回给出数字位置(从0算起)的元素,如果在该位置没有找到对象,返回-1。
inspect()instance(none)重载inspect(),返回更好格式的反映Array每个元素的字符描述。
last()instance(none)返回最后一个元素。
reverse([applyToSelf])instanceapplyToSelf:indicatesifthearrayitselfshouldalsobereversed.反转Array中元素的顺序,如果没有给出参数,或参数为true,则源Array中元素的顺序也反转,否则源Array保持不变。
shift()instance(none)返回Array的第一个元素并从Array中移除它,Array的Length-1。
without(value1[,value2[,..valueN]])instancevalue1...valueN:valuestobeexcludedifpresentinthearray.返回一个把参数列表中包含的元素从源Array中排除的Array。

documentDOM扩展

MethodKindArgumentsDescription
getElementsByClassName(className[,parentElement])instanceclassName:nameofaCSSclassassociatedwiththeelements,parentElement:objectoridoftheelementthatcontainstheelementsbeingretrieved.返回所有CSSclassName属性等于className参数的元素,如果没有给出parentElement,那么将搜索documentbody。(此处使用document.body我觉得不如使用document,因为有时有的页面没有body)

Event扩展

PropertyTypeDescription
KEY_BACKSPACENumberNumber8:Constant.CodefortheBackspacekey.
KEY_TABNumber9:Constant.CodefortheTabkey.
KEY_RETURNNumber13:Constant.CodefortheReturnkey.
KEY_ESCNumber27:Constant.CodefortheEsckey.
KEY_LEFTNumber37:Constant.CodefortheLeftarrowkey.
KEY_UPNumber38:Constant.CodefortheUparrowkey.
KEY_RIGHTNumber39:Constant.CodefortheRightarrowkey.
KEY_DOWNNumber40:Constant.CodefortheDownarrowkey.
KEY_DELETENumber46:Constant.CodefortheDeletekey.
observers:ArrayListofcachedobservers.Partoftheinternalimplementationdetailsoftheobject.
MethodKindArgumentsDescription
element(event)staticevent:anEventobject返回事件源对象。
isLeftClick(event)staticevent:anEventobject如果点击了鼠标左键,返回true.
pointerX(event)staticevent:anEventobject返回鼠标的X座标。
pointerY(event)staticevent:anEventobject返回鼠标的Y座标。
stop(event)staticevent:anEventobject使用此函数来中断事件的默认行为并阻止传递(冒泡)。
findElement(event,tagName)staticevent:anEventobject,tagName:nameofthedesiredtag.从事件源对象开始向上搜索DOM树,直到找到第一个符合tagName的元素
observe(element,name,observer,useCapture)staticelement:objectorid,name:eventname(like'click','load',etc),observer:functiontohandletheevent,useCapture:iftrue,handlestheeventinthecapturephaseandiffalseinthebubblingphase.为对象的某个事件增加一个处理函数。
stopObserving(element,name,observer,useCapture)staticelement:objectorid,name:eventname(like'click'),observer:functionthatishandlingtheevent,useCapture:iftruehandlestheeventinthecapturephaseandiffalseinthebubblingphase.和上面的函数相反。
_observeAndCache(element,name,observer,useCapture)static私有函数,别管它。
unloadCache()static(none)私有函数,别管它。从内存中清除所有的observers缓存。
下面代码演示如何给window添加一个load事件处理函数。

<script>

Event.observe(window,'load',showMessage,false);
functionshowMessage(){
alert('Pageloaded.');
}
</script>


在prototype.js中定义新的对象和类

另一个这个程序包帮助你的地方就是提供许多既支持面向对象设计理念又有共通功能的许多对象。

ThePeriodicalExecuterobject

这个对象提供一定间隔时间上重复调用一个方法的逻辑。

MethodKindArgumentsDescription
[ctor](callback,interval)constructorcallback:aparameterlessfunction,interval:numberofseconds创建这个对象的实例将会重复调用给定的方法。
PropertyTypeDescription
callbackFunction()被调用的方法,该方法不能传入参数。
frequencyNumber以秒为单位的间隔。
currentlyExecutingBoolean表示这个方法是否正在执行。

ThePrototypeobject

Prototype没有太重要的作用,只是声明了该程序包的版本。

PropertyTypeDescription
VersionString版本。
emptyFunctionFunction()空函数。
KFunction(obj)一个仅仅回传参数的函数。
ScriptFragmentString识别script的正则式。

TheEnumerableobject

Enumberable对象能够已更优雅的方式实现对列表样式的结构进行枚举。

很多其它的对象通过扩展自Enumberable对象来得到这些有用的接口。

MethodKindArgumentsDescription
each(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)把每个element做为第一个参数,element的index作为第一个参数调用iterator函数。
all([iterator])instanceiterator:afunctionobjectconformingtoFunction(value,index)这个函数会用给出的iterator测试整个集合,如果集合中任一元素在iterator函数测试中返回false或null,那么这个函数返回false,否则返回true。如果没有给出iterator,那么就会测试所有的元素是不是不等于false和null。你可以简单的把它看成是“检测每个元素都为非空非负”。
any(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index),optional.这个函数会用给出的iterator测试整个集合,如果集合中任一元素在iterator函数测试中返回true,那么这个函数返回true,否则返回false。如果没有给出iterator,那么就会测试所有的元素是不是有一个不等于false和null。你可以简单的把它看成是“检测元素中是不是有非空非负的”。
collect(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)调用iterator函数根据集合中每个元素返回一个结果,然后按照原来集合中的顺序,返回一个Array。
detect(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)集合中每个元素调用一次Iterator,返回第一个使Iterator返回True的元素,如果最终都没有为true的调用,那么返回null。
entries()instance(none)等于toArray().
find(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)等于detect().
findAll(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)集合中每个元素调用Iterator,返回一个由所有调用Iterator返回结果等于true的元素组成的数组。和reject()相反。
grep(pattern[,iterator])instancepattern:aRegExpobjectusedtomatchtheelements,iterator:afunctionobjectconformingtoFunction(value,index)用pattern参数正则表达式测试集合中的每个元素,返回一个包含所有匹配正则式的元素的Array,如果给出了Iterator,那个每个结果还要经过一下Iterator处理。
include(obj)instanceobj:anyobject判断集合中包不包含指定对象。
inject(initialValue,iterator)instanceinitialValue:anyobjecttobeusedastheinitialvalue,iterator:afunctionobjectconformingtoFunction(accumulator,value,index)用Iterator联接所有集合中的元素。Iterator在被调用时把上一次迭代的结果做为第一个参数传给accumulator。第一次迭代时,accurmelator等于initialValue,最后返回accumulator的值。
invoke(methodName[,arg1[,arg2[...]]])instancemethodName:nameofthemethodthatwillbecalledineachelement,arg1..argN:argumentsthatwillbepassedinthemethodinvocation.集合中的每个元素调用指定的函数(查看源代码可以发现指定函数被调用时,this指针被传成当前元素),并传入给出的参数,返回调用结果组成的Array。
map(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)同collect().
max([iterator])instanceiterator:afunctionobjectconformingtoFunction(value,index)返回集合中元素的最大值,或调用Iterator后返回值的最大值(如果给出了Iterator的话)。
member(obj)instanceobj:anyobject同include().
min([iterator])instanceiterator:afunctionobjectconformingtoFunction(value,index)返回最小值,参见max()。
partition([iterator])instanceiterator:afunctionobjectconformingtoFunction(value,index)返回一个包含两个Array的Array,第一个Array包含所有调用Iterator返回True的元素,第二个Array包含剩下的元素。如果Iterator没有给出,那么就根据元素本身判断。
pluck(propertyName)instancepropertyNamenameofthepropertythatwillbereadfromeachelement.Thiscanalsocontaintheindexoftheelement返回每个元素的指定属性名的属性的值组成的Array。
reject(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)和findAll()相反(返回所有等于false的元素).
select(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)同findAll().
sortBy(iterator)instanceiterator:afunctionobjectconformingtoFunction(value,index)根据每个元素调用Iterator返回的值进行排序返回一个Array。
toArray()instance(none)返回由集合所有元素组成的一个Array。
zip(collection1[,collection2[,...collectionN[,transform]]])instancecollection1..collectionN:enumerationsthatwillbemerged,transform:afunctionobjectconformingtoFunction(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]]"

TheHashobject

Hash对象实现一种Hash结构,也就是一个Key:Value对的集合。

Hash中的每个Item是一个有两个元素的array,前一个是Key,后一个是Value,每个Item也有两个不需加以说明的属性,key和value。

MethodKindArgumentsDescription
keys()instance(none)返回所有Item的key的集合的一个array。
values()instance(none)返回所有Item的value的集合的一个array。
merge(otherHash)instanceotherHash:Hashobject合并给出的Hash,返回一个新Hash。
toQueryString()instance(none)以QueryString那样的样式返回hash中所有的item,例如:'key1=value1&key2=value2&key3=value3'
inspect()instance(none)用一种合适的方法显示hash中的key:value对。

TheObjectRangeclass

继承自Enumerable

用上、下边界描述一个对象区域。

PropertyTypeKindDescription
start(any)instancerange的下边界

end(any)instancerange的上边界
exclusiveBooleaninstance决定边界自身是不是range的一部分。
MethodKindArgumentsDescription
[ctor](start,end,exclusive)constructorstart:thelowerbound,end:theupperbound,exclusive:includetheboundsintherange?创建一个range对象,从start生成到end,这里要注意的是,start和end必段类型一致,而且该类型要有succ()方法。
include(searchedValue)instancesearchedValue:valuethatwearelookingfor检查一个value是不是在range中。

TheClassobject

在这个程序包中Class对象在声明其他的类时候被用到。用这个对象声明类使得新类支持initialize()方法,他起构造方法的作用。

看下面的例子

//declaringtheclass
varMySampleClass=Class.create();

//definingtherestoftheclassimplmentation
MySampleClass.prototype={

initialize:function(message){
this.message=message;
},

showMessage:function(ajaxResponse){
alert(this.message);
}
};

//now,let'sinstantiateanduseoneobject
varmyTalker=newMySampleClass('hithere.');
myTalker.showMessage();//displaysalert

MethodKindArgumentsDescription
create(*)instance(any)定义新类的构造方法。

TheAjaxobject

这个对象被用作其他提供AJAX功能的类的根对象。

PropertyTypeKindDescription
activeRequestCountNumberinstance正在处理中的Ajax请求的个数。
MethodKindArgumentsDescription
getTransport()instance(none)返回新的XMLHttpRequest对象。

TheAjax.Respondersobject

继承自Enumerable

这个对象维持一个在Ajax相关事件发生时将被调用的对象的列表。比如,你要设置一个全局钩子来处理Ajax操作异常,那么你就可以使用这个对象。

PropertyTypeKindDescription
respondersArrayinstance被注册到Ajax事件通知的对象列表。
MethodKindArgumentsDescription
register(responderToAdd)instanceresponderToAdd:objectwithmethodsthatwillbecalled.被传入参数的对象应包含名如Ajax事件的系列方法(如onCreate,onComplete,onException)。通讯事件引发所有被注册的对象的合适名称的函数被调用。
unregister(responderToRemove)instanceresponderToRemove:objecttoberemovedfromthelist.从列表中移除。
dispatch(callback,request,transport,json)instancecallback:nameoftheAJAXeventbeingreported,request:theAjax.Requestobjectresponsiblefortheevent,transport:theXMLHttpRequestobjectthatcarried(oriscarrying)theAJAXcall,json:theX-JSONheaderoftheresponse(ifpresent)遍历被注册的对象列表,找出有由callback参数决定的那个函数的对象。然后向这些函数传递其它的三个参数,如果Ajax响应中包含一个含有JSON内容的X-JSONHTTP头,那么它会被热行并传入json参数。如果事件是onException,那么transport参数会被异常代替,json不会传递。

TheAjax.Baseclass

这个类是其他在Ajax对象中定义的类的基类。

MethodKindArgumentsDescription
setOptions(options)instanceoptions:AJAXoptions设定AJAX操作想要的选项。
responseIsSuccess()instance(none)返回true如果AJAX操作成功,否则为false。
responseIsFailure()instance(none)与responseIsSuccess()相反。

TheAjax.Requestclass

继承自Ajax.Base

封装AJAX操作

PropertyTypeKindDescription
EventsArraystatic在AJAX操作中所有可能报告的事件/状态的列表。这个列表包括:'Uninitialized','Loading','Loaded','Interactive',和'Complete'。
transportXMLHttpRequestinstance承载AJAX操作的XMLHttpRequest对象。
urlstringinstance请求的URL。
MethodKindArgumentsDescription
[ctor](url,options)constructorurl:theurltobefetched,options:AJAXoptions创建这个对象的一个实例,它将在给定的选项下请求url。onCreate事件在调用constructor事被激发。重要:如果选择的url受到浏览器的安全设置,他会一点作用也不起。很多情况下,浏览器不会请求与当前页面不同主机(域名)的url。你最好只使用本地url来避免限制用户配置他们的浏览器(谢谢Clay)
evalJSON()instance(none)这个方法显然不会被外部调用。它在Ajax响应中含有X-JSONHTTP头时用于内部调用执行这些内容。
evalReponse()instance(none)这也方法显然不会被外部调用,如果Ajax响应含有一个值为text/javascript的Cotent-Type头,那么这个方法就用被调用执行响应体。
header(name)instancename:HTTPheadername引用Ajax响应的头的内容,在Ajax访问结束后再调用这个方法。
onStateChange()instance(none)这个方法通常不会被外部调用。当AJAX请求状态改变的时候被这个对象自己调用。
request(url)instanceurl:urlfortheAJAXcall这个方法通常不会被外部调用。已经在构造方法中调用了。
respondToReadyState(readyState)instancereadyState:statenumber(1to4)这个方法通常不会被外部调用。当AJAX请求状态改变的时候被这个对象自己调用。
setRequestHeaders()instance(none)这个方法通常不会被外部调用。被这个对象自己调用来配置在HTTP请求要发送的HTTP报头。

Theoptionsargumentobject

AnimportantpartoftheAJAXoperationsistheoptionsargument.There'snooptionsclassperse.Anyobjectcanbepassed,aslongasithastheexpectedproperties.ItiscommontocreateanonymousobjectsjustfortheAJAXcalls.

PropertyTypeDefaultDescription
methodString'post'HTTP请求方式。
parametersString''在HTTP请求中传入的url格式的值列表。
asynchronousBooleantrue指定是否做异步AJAX请求。
postBodyStringundefined在HTTPPOST的情况下,传入请求体中的内容。
requestHeadersArrayundefined和请求一起被传入的HTTP头部列表,这个列表必须含有偶数个项目,任何奇数项目是自定义的头部的名称,接下来的偶数项目使这个头部项目的字符串值。例子:['my-header1','thisisthevalue','my-other-header','anothervalue']
onXXXXXXXXFunction(XMLHttpRequest,Object)undefined在AJAX请求中,当相应的事件/状态形成的时候调用的自定义方法。例如varmyOpts={onComplete:showResponse,onLoaded:registerLoaded};.这个方法将被传入一个参数,这个参数是承载AJAX操作的XMLHttpRequest对象,另一个是包含被执行X-JSON响应HTTP头。
onSuccessFunction(XMLHttpRequest,Object)undefined当AJAX请求成功完成的时候调用的自定义方法。这个方法将被传入一个参数,这个参数是承载AJAX操作的XMLHttpRequest对象,另一个是包含被执行X-JSON响应HTTP头。
onFailureFunction(XMLHttpRequest,Object)undefined当AJAX请求完成但出现错误的时候调用的自定义方法。这个方法将被传入一个参数,这个参数是承载AJAX操作的XMLHttpRequest对象,另一个是包含被执行X-JSON响应HTTP头。
onExceptionFunction(Ajax.Request,exception)undefined当一个在客户端执行的Ajax发生像无效响应或无效参数这样的异常情况时被调用的自定义函数。它收到两个参数,包含异常Ajax操作的Ajax.Request对象和异常对象。
insertionanInsertionclassundefined一个能决定怎么样插入新内容的类,能Insertion.Before,Insertion.Top,Insertion.Bottom,或Insertion.After.只能应用于Ajax.Updater对象.
evalScriptsBooleanundefined,false决定当响应到达的时候是否执行其中的脚本块,只在Ajax.Updater对象中应用。
decayNumberundefined,1决定当最后一次响应和前一次响应相同时在Ajax.PeriodicalUpdater对象中的减漫访问的次数,例如,如果设为2,后来的刷新和之前的结果一样,这个对象将等待2个设定的时间间隔进行下一次刷新,如果又一次一样,那么将等待4次,等等。不设定这个只,或者设置为1,将避免访问频率变慢。
frequencyNumberundefined,2用秒表示的刷新间的间隔,只能应用于Ajax.PeriodicalUpdater对象。

TheAjax.Updaterclass

继承自Ajax.Request

当请求的url返回一段HTML而你想把它直接放置到页面中一个特定的元素的时候被用到。如果url的返回<script>的块并且想在接收到时就执行它的时候也可以使用该对象。含有脚本的时候使用evalScripts选项。

PropertyTypeKindDescription
containersObjectinstance这个对象包含两个属性:AJAX请求成功执行的时候用到containers.success,否则的话用到containers.failure。
MethodKindArgumentsDescription
[ctor](container,url,options)constructorcontainer:thiscanbetheidofanelement,theelementobjectitself,oranobjectwithtwoproperties-object.successelement(orid)thatwillbeusedwhentheAJAXcallsucceeds,andobject.failureelement(orid)thatwillbeusedotherwise.url:theurltobefetched,options:AJAXoptions创建一个用给定的选项请求给定的url的一个实例。
updateContent()instance(none)这个方法通常不会被外部调用。当响应到达的时候,被这个对象自己调用。它会用HTML更新适当的元素或者调用在insertion选项中传入的方法-这个方法将被传入两个参数,被更新的元素和响应文本。

TheAjax.PeriodicalUpdaterclass

继承自Ajax.Base

这个类重复生成并使用Ajax.Updater对象来刷新页面中的一个元素。或者执行Ajax.Updater可以执行的其它任务。更多信息参照Ajax.Updater参考。

PropertyTypeKindDescription
containerObjectinstance这个值将直接传入Ajax.Updater的构造方法。
urlStringinstance这个值将直接传入Ajax.Updater的构造方法。
frequencyNumberinstance两次刷新之间的间隔(不是频率),以秒为单位。默认2秒。This当调用Ajax.Updater对象的时候,这个数将和当前的decay相乘。
decayNumberinstance重负执行任务的时候保持的衰败水平。
updaterAjax.Updaterinstance最后一次使用的Ajax.Updater对象
timerObjectinstance通知对象该下一次更新时用到的JavaScript计时器。
MethodKindArgumentsDescription
[ctor](container,url,options)constructorcontainer:thiscanbetheidofanelement,theelementobjectitself,oranobjectwithtwoproperties-object.successelement(orid)thatwillbeusedwhentheAJAXcallsucceeds,andobject.failureelement(orid)thatwillbeusedotherwise.url:theurltobefetched,options:AJAXoptions创建一个用给定的选项请求给定的url的一个实例。
start()instance(none)这个方法通常不会被外部调用。对象为了开始周期性执行任务的时候调用的方法。
stop()instance(none)使对象停止执行周期任务。停止后,如果有onComplete选项,那么引发callback。
updateComplete()instance(none)这个方法通常不会被外部调用。被当前的Ajax.Updater使用,当一次请求结束的时候,它被用作计划下一次请求。
onTimerEvent()instance(none)这个方法通常不会被外部调用。当到下一次更新时被内部调用。

TheElementobject

这个对象提供在操作DOM中元素时使用的功能性方法。

MethodKindArgumentsDescription
addClassName(element,className)instanceelement:elementobjectorid,className:nameofaCSSclass将给出的className添加到对象的className属性中。
classNames(element)instanceelement:elementobjectorid返回一个Element.ClassName的对象表示CSS给出对象有的classnames。
cleanWhitespace(element)instanceelement:elementobjectorid清除对象子元素中所有空白的textnode。
empty(element)instanceelement:elementobjectorid返回一个布尔值指示对象为空或只有空白字符。
getDimensions(element)instanceelement:elementobjectorid返回对象的尺寸,返回值有两个属性,height和width。
getHeight(element)instanceelement:elementobjectorid返回元素的offsetHeight。
getStyle(element,cssProperty)instanceelement:elementobjectorid,cssPropertynameofaCSSproperty(eitherformat'prop-name'or'propName'works).返回给定对象的CSS属性值或没有指定cssProperty时返回null。
hasClassName(element,className)instanceelement:elementobjectorid,className:nameofaCSSclass返回true如果元素的类名中含有给定的类名
hide(elem1[,elem2[,elem3[...]]])instanceelemN:elementobjectorid通过设定style.display为'none'来隐藏每个传入的元素。
makeClipping(element)instanceelement:elementobjectorid能过设定overflow的值设定内容溢出剪辑。
makePositioned(element)instanceelement:elementobjectorid更改对象的style.position为'relative'。
remove(element)instanceelement:elementobjectorid从document对象中删除指定的元素。
removeClassName(element,className)instanceelement:elementobjectorid,className:nameofaCSSclass从元素的类名中删除给定的类名。
scrollTo(element)instanceelement:elementobjectorid滚动window到对象的位置。
setStyle(element,cssPropertyHash)instanceelement:elementobjectorid,cssPropertyHashHashobjectwiththestylestobeapplied.依照cssPropertyHash参数给对象设置CSS属性值。
show(elem1[,elem2[,elem3[...]]])instanceelemN:elementobjectorid用设定它的style.display为''来显示每个传入的元素。
toggle(elem1[,elem2[,elem3[...]]])instanceelemN:elementobjectorid切换每一个传入元素的可视性。
undoClipping(element)instanceelement:elementobjectoridstyle.overflow的值返回上一个设定值。
undoPositioned(element)instanceelement:elementobjectorid清除对象的style.position为''
update(element,html)instanceelement:elementobjectorid,html:htmlcontent用给出的HTML参数替换对象的innerHTML,如果HTML参数中包含<script>,那么它们不会被包含进去,但是会执行。
visible(element)instanceelement:elementobjectorid返回一个布尔值指示对象可不可见。

TheElement.ClassNamesclass

继承自Enumerable

在一个对象中表示CSSclassnames的集合。

MethodKindArgumentsDescription
[ctor](element)constructorelement:anyDOMelementobjectorid创建一个对象,给出对象的CSSclassnames被表现在这个ClassNames对象中。
add(className)instanceclassName:aCSSclassname把CSSclassname包含进对象的classnames列表。
remove(className)instanceclassName:aCSSclassname从对象的classnames列表中移除className
set(className)instanceclassName:aCSSclassname设定对象CSSclassname为className,移除其它classnames。

TheAbstractobject

这个对象是这个程序包中其他类的根。它没有任何属性和方法。在这个对象中定义的类可以被视为传统的抽象类。

TheAbstract.Insertionclass

这个类被用作其他提供动态内容插入功能的类的基类,它像一个抽象类一样被使用。

MethodKindArgumentsDescription
[ctor](element,content)constructorelement:elementobjectorid,content:HTMLtobeinserted创建一个可以帮助插入动态内容的对象。
contentFromAnonymousTable()instance(none)对content通过匿名表格变成一个Node数组。
PropertyTypeKindDescription
adjacencyStringstatic,parameter这个参数指定相对于给定元素,内容将被放置的位置。可能的值是:'beforeBegin','afterBegin','beforeEnd',和'afterEnd'.
elementObjectinstance与插入物做参照元素对象。
contentStringinstance被插入的HTML。

TheInsertionobject

这个对象是其他类似功能的根。它没有任何属性和方法。在这个对象中定义的类仍然可以被视为传统的抽象类。

TheInsertion.Beforeclass

继承自Abstract.Insertion

在给定元素开始标记的前面插入HTML。

MethodKindArgumentsDescription
[ctor](element,content)constructorelement:elementobjectorid,content:HTMLtobeinserted继承自Abstract.Insertion.创建一个可以帮助插入动态内容的对象。
下面的代码

<br>Hello,<spanid="person"style="color:red;">Wiggum.How'sitgoing?</span>
<script>newInsertion.Before('person','Chief');</script>


将把HTML变为

<br>Hello,Chief<spanid="person"style="color:red;">Wiggum.How'sitgoing?</span>



TheInsertion.Topclass

继承自Abstract.Insertion

在给定元素第一个子节点位置插入HTML。内容将位于元素的开始标记的紧后面。

MethodKindArgumentsDescription
[ctor](element,content)constructorelement:elementobjectorid,content:HTMLtobeinserted继承自Abstract.Insertion.创建一个可以帮助插入动态内容的对象。
下面的代码

<br>Hello,<spanid="person"style="color:red;">Wiggum.How'sitgoing?</span>
<script>newInsertion.Top('person','Mr.');</script>


将把HTML变为

<br>Hello,<spanid="person"style="color:red;">Mr.Wiggum.How'sitgoing?</span>



TheInsertion.Bottomclass

InheritsfromAbstract.Insertion

在给定元素最后一个子节点位置插入HTML。内容将位于元素的结束标记的紧前面。

MethodKindArgumentsDescription
[ctor](element,content)constructorelement:elementobjectorid,content:HTMLtobeinsertedInheritedfromAbstract.Insertion.Createsanobjectthatwillhelpwithdynamiccontentinsertion.
Thefollowingcode

<br>Hello,<spanid="person"style="color:red;">Wiggum.How'sitgoing?</span>

<script>newInsertion.Bottom('person',"What'sup?");</script>


WillchangetheHTMLto

<br>Hello,<spanid="person"style="color:red;">Wiggum.How'sitgoing?What'sup?</span>



TheInsertion.Afterclass

InheritsfromAbstract.Insertion

在给定元素结束标记的后面插入HTML。

MethodKindArgumentsDescription
[ctor](element,content)constructorelement:elementobjectorid,content:HTMLtobeinsertedInheritedfromAbstract.Insertion.Createsanobjectthatwillhelpwithdynamiccontentinsertion.
Thefollowingcode

<br>Hello,<spanid="person"style="color:red;">Wiggum.How'sitgoing?</span>

<script>newInsertion.After('person','Areyouthere?');</script>


WillchangetheHTMLto

<br>Hello,<spanid="person"style="color:red;">Wiggum.How'sitgoing?</span>Areyouthere?


TheFieldobject

这个对象提供操作表单中的输入项目的功能性方法。

MethodKindArgumentsDescription
clear(field1[,field2[,field3[...]]])instancefieldN:fieldelementobjectorid清除传入表单中项目元素的值。
present(field1[,field2[,field3[...]]])instancefieldN:fieldelementobjectorid只有在所有的表单项目都不为空时返回true。
focus(field)instancefield:fieldelementobjectorid移动焦点到给定的表单项目。
select(field)instancefield:fieldelementobjectorid选择支持项目值选择的表单项目的值。
activate(field)instancefield:fieldelementobjectorid移动焦点并且选择支持项目值选择的表单项目的值。

TheFormobject

这个对象提供操作表单和他们的输入元素的功能性方法。

MethodKindArgumentsDescription
serialize(form)instanceform:formelementobjectorid返回url参数格式的项目名和值的列表,如'field1=value1&field2=value2&field3=value3'。
findFirstElement(form)instanceform:formelementobjectorid返回Form中第一个Enable的对象。
getElements(form)instanceform:formelementobjectorid返回包含所有在表单中输入项目的Array对象。
getInputs(form[,typeName[,name]])instanceform:formelementobjectorid,typeName:thetypeoftheinputelement,name:thenameoftheinputelement.返回一个Array包含所有在表单中的<input>元素。另外,这个列表可以对元素的类型或名字属性进行过滤。
disable(form)instanceform:formelementobjectorid使表单中的所有输入项目无效。
enable(form)instanceform:formelementobjectorid使表单中的所有输入项目有效。
focusFirstElement(form)instanceform:formelementobjectorid激活第一个表单中可视的,有效的输入项目。
reset(form)instanceform:formelementobjectorid重置表单。和调用表单对象的reset()方法一样。

TheForm.Elementobject

这个对象提供表单对象中的可视和非可视元素的功能性方法。

MethodKindArgumentsDescription
serialize(element)instanceelement:elementobjectorid返回元素的名称=值对,如'elementName=elementValue'。
getValue(element)instanceelement:elementobjectorid返回元素的值。

TheForm.Element.Serializersobject

这个对象提供了内部使用的用来协助解析出表单元素的当前值的一些有用的方法。

MethodKindArgumentsDescription
inputSelector(element)instanceelement:objectoridofaformelementthathasthecheckedproperty,likearadiobuttonorcheckbox.返回带有元素名称和值的Array,如['elementName','elementValue']
textarea(element)instanceelement:objectoridofaformelementthathasthevalueproperty,likeatextbox,buttonorpasswordfield.返回带有元素名称和值的Array,如['elementName','elementValue']
select(element)instanceelement:objectofa<select>element返回带有元素名称和所有被选择的选项的值或文本的Array,如['elementName','selOpt1selOpt4selOpt9']

TheAbstract.TimedObserverclass

这个类是用于其它监听一个元素的值(或者任何类中涉及的属性)变化的类的基类,这个类像一个抽象类一样被使用。

子类可以被创建来监听如输入项目值,或style属性,或表格的行数,或者其他任何对跟踪变化相关的东西。

子类必须实现这个方法来决定什么才是被监听的元素的当前值。
MethodKindArgumentsDescription
[ctor](element,frequency,callback)constructorelement:elementobjectorid,frequency:intervalinseconds,callback:functiontobecalledwhentheelementchanges创建一个监听元素的对象。
getValue()instance,abstract(none)子类必须实现这个方法以瘊定什么这个元素被监视的当前值。
registerCallback()instance(none)这个方法通常不会被外部调用。被这个对象自己调用来开始监听那个元素。
onTimerEvent()instance(none)这个方法通常不会被外部调用。被这个对象自己调用来周期性的检查那个元素。
PropertyTypeDescription
elementObject被监听的元素对象。
frequencyNumber每次检查中的以秒为单位的时间间隔。
callbackFunction(Object,String)只要元素改变这个方法就会被调用。会接收到元素对象和新值作为参数。
lastValueString元素被核实的最后一个值。

TheForm.Element.Observerclass

继承自Abstract.TimedObserver

Abstract.TimedObserver的一个实现类用来监听表单输入项目的值的变化。当你想监听一个没有带报告值变化事件的元素的时候使用这个类。否则的话使用Form.Element.EventObserver类代替。

MethodKindArgumentsDescription
[ctor](element,frequency,callback)constructorelement:elementobjectorid,frequency:intervalinseconds,callback:functiontobecalledwhentheelementchanges继承自Abstract.TimedObserver.创建一个监听元素值属性的对象。
getValue()instance(none)返回元素的值。

TheForm.Observerclass

继承自Abstract.TimedObserver

Abstract.TimedObserver的一个实现类用来监听表单中任何数据项的值的变化。当你想监听一个没有带报告值变化事件的元素的时候使用这个类。否则的话使用类Form.EventObserver代替。

MethodKindArgumentsDescription
[ctor](form,frequency,callback)constructorform:formobjectorid,frequency:intervalinseconds,callbackfunctiontobecalledwhenanydataentryelementintheformchanges继承自Abstract.TimedObserver.创建一个监听表单变化的对象。
getValue()instance(none)返回所有表单数据的一系列值。

TheAbstract.EventObserverclass

这个类被用作其他一些类的基类,这些类具有在一个元素的值改变事件发生的时候执行一个回调方法这样的功能。

类Abstract.EventObserver的多个对象可以绑定到一个元素上,不是一个帮其他的擦出了,而是按照他们付给元素的顺序执行这些回调方法。

单选按钮和复选框的触发事件是onclick,而文本框和下拉列表框/下拉列表框的是onchange。

MethodKindArgumentsDescription
[ctor](element,callback)constructorelement:elementobjectorid,callback:functiontobecalledwhentheeventhappens创建监听元素的对象。
getValue()instance,abstract(none)子类必须实现这个方法以瘊定什么这个元素被监视的当前值。
registerCallback()instance(none)这个方法通常不会被外部调用。被对象调用来把自己绑定到元素的事件上。
registerFormCallbacks()instance(none)这个方法通常不会被外部调用。被对象调用来把自己绑定到表单中的每一个数据项元素的事件上。
onElementEvent()instance(none)这个方法通常不会被外部调用。将被绑定到元素的事件上。
PropertyTypeDescription
elementObject被监听的元素对象。
callbackFunction(Object,String)只要元素改变就调用的方法。会接收到元素对象和新值作为参数。
lastValueString元素被核实的最后一个值。

TheForm.Element.EventObserverclass

继承自Abstract.EventObserver

Abstract.EventObserver的一个实现类,它在监测到表单中数据项元素的值改变的相应事件时候执行一个回调方法。如果元素没有任何报告变化的事件,那么你可以使用Form.Element.Observer类代替。

MethodKindArgumentsDescription
[ctor](element,callback)constructorelement:elementobjectorid,callback:functiontobecalledwhentheeventhappens继承自Abstract.EventObserver。创建一个监听元素值属性的对象。
getValue()instance(none)返回元素的值。

TheForm.EventObserverclass

继承自Abstract.EventObserver

Abstract.EventObserver的一个实现类,监听表单对象中包含的任何对象的任何变化,用元素的事件检测值的变化。如果元素没有任何报告变化的事件,那么你可以使用Form.Observer类代替。
MethodKindArgumentsDescription
[ctor](form,callback)constructorform:formobjectorid,callback:functiontobecalledwhenanydataentryelementintheformchanges继承自Abstract.EventObserver。创建一个监听元素值属性的对象。
getValue()instance(none)返回所有表单数据的一系列值。

Position对象(预备文档)

这个对象提供许多和元素位置相关的方法。

MethodKindArgumentsDescription
prepare()instance(none)调整deltaX和deltaY属性来协调在滚动位置中的变化。记得在页面滚动之后的任何调用的withinIncludingScrolloffset之前调用这个方法。
realOffset(element)instanceelement:object返回这个元素的正确滚动偏差的Array对象,包括所有影响元素的滚动偏差。结果数组类似[total_scroll_left,total_scroll_top]
cumulativeOffset(element)instanceelement:object回这个元素的正确滚动偏差的Array对象,包含任何被放置的父元素强加偏差。结果数组类似[total_offset_left,total_offset_top]
within(element,x,y)instanceelement:object,xandy:coordinatesofapoint测试给定的点的坐标是否在给定的元素的外部矩形范围之内。
withinIncludingScrolloffsets(element,x,y)instanceelement:object,xandy:coordinatesofapoint测试给定的点的坐标是否在给定的元素的外部矩形范围之内(包含scrolloffsets)。
overlap(mode,element)instancemode:'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)instancesource:elementobjectorid,target:elementobjectorid改变目标元素的大小尺寸和位置与源元素的相同。
信息来源:http://www.cnblogs.com/thinhunan/archive/2006/04/01/364404.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: