(十一).Prototype1.5 rc2)使用指南之form

這一部分提供了很多與表單操作有關(guān)的功能,包括以下部分,當(dāng)通過$方法返回元素時(shí),可以直接通過$(element).method()調(diào)用:

Form對(duì)象:提供了操作整個(gè)表單的一些方法
Form.Element對(duì)象:提供了操作某個(gè)表單元素的方法
TimedObserver類:周期性表單監(jiān)視器,當(dāng)表單元素值改變的時(shí)候執(zhí)行一個(gè)回調(diào)函數(shù),有FormElement兩種類型
EventObserver類:利用事件來監(jiān)視表單元素,當(dāng)表單元素值改變的時(shí)候執(zhí)行一個(gè)回調(diào)函數(shù),有FormElement兩種類型

Form對(duì)象:

reset(form)form.reset()
serializeElements(elements)
:將elements中的元素序列化,就是返回指定的所有元素的queryString的形式,便于在xmlhttp或其他地方使用

serialize(form):序列化整個(gè)表單
getElements(form):返回表單的所有可序列化元素
getInputs(form, typeName, name):返回所有符合typeNamenameinput元素
disable(form):使整個(gè)表單處于不可用狀態(tài)
enable(form) :是整個(gè)表單可用
findFirstElement(form):返回類型為'input’, ’select’, 'textarea’的第一個(gè)可用的非隱藏元素
focusFirstElement(form):使findFirstElement(form)返回的元素得到焦點(diǎn)

Form.Element對(duì)象:

focus(element) select(element)html元素內(nèi)置方法的封裝,除了返回元素本身
serialize(element):序列化指定的表單元素,返回key=value的形式,返回的string已經(jīng)encodeURIComponent
getValue(element):返回元素的值
clear(element):清除元素的值
present(element):判斷元素的值是否非空
activate(element):使元素獲得焦點(diǎn)
disable(element):使元素不可用
enable(element):是元素可用

$F = Form.Element.getValue 方便使用

Form.Element.Observer以及Form.Observer類:

周期性監(jiān)視表單元素,如果表單或表單元素的值有改變時(shí),執(zhí)行執(zhí)行一個(gè)回調(diào)函數(shù),使用方式如下:

var oser=new Form.Element.Observer(element, frequency, callback)
or oser=new Form.Observer(form, frequency, callback)
callback
可以定義兩個(gè)參數(shù) form/elementForm.serialize()/value

Form.Element.EventObserverForm.EventObserver類:

這兩個(gè)類跟上面的差不多,只是不是周期性的監(jiān)視,而是利用元素的changeclick事件來監(jiān)視表單元素的變化,當(dāng)發(fā)生變化時(shí)執(zhí)行callback,參數(shù)跟上面一樣

 

(十二).Prototype1.5 rc2)使用指南之event.js

在介紹PrototypeEvent對(duì)象前先介紹一下瀏覽器中的事件模型,瀏覽器中的事件主要有HTML事件、鼠標(biāo)事件和鍵盤事件,前兩種事件比較好理解,這里主要解釋一下鍵盤事件以及它在IEfirefox中的區(qū)別

鍵盤事件包括keydownkepresskeyup三種,每次敲擊鍵盤都會(huì)(依次?)觸發(fā)這三種事件,其中keydownkeyup是比較低級(jí)的接近于硬件的事件,通俗的理解是這兩個(gè)事件可以捕獲到你敲擊了鍵盤中某個(gè)鍵;而keypress是相對(duì)于字符層面的較為高級(jí)點(diǎn)的事件,這個(gè)事件能夠捕捉到你鍵入了哪個(gè)字符。可以這樣理解,如果你敲擊了A鍵,keydownkeyup事件只是知道你敲擊了A鍵,它并不知道你敲的是大寫的A(你同時(shí)按下了Shift)還是敲的是小寫a,它是以""為單位,你敲入了大寫的A,它只是當(dāng)成你敲下了shiftA兩個(gè)鍵而已,但是keypress可以捕捉到你是敲入的大寫的A還是小寫的a

還要理解一個(gè)概念是鍵盤中的鍵分為字符(可打印)鍵和功能鍵(不可打印),功能鍵包括Backspace, Enter, Escape, the arrow keys, Page Up, Page Down, and F1 through F12

下面說一下鍵盤事件的具體使用方法,

鍵盤事件的event對(duì)象中包含一個(gè)keyCode屬性,IE中只有這一個(gè)屬性,當(dāng)為keydownkeyup 事件是,keycode屬性表示你具體按下的鍵(也稱為virtual keycode),當(dāng)捕捉的是keypress事件時(shí)keyCode屬性指的是你鍵入的字符(character code)

firefox中情況有些不同,event對(duì)象包含一個(gè)keyCode屬性和一個(gè)charCode屬性,keydownkeyup事件的時(shí)候,keyCode表示的就是你具體按的鍵,charCode0;當(dāng)捕捉的是keypress事件時(shí),keyCode0charCode指的是你按下的字符

當(dāng)捕捉的是keypress事件時(shí),當(dāng)你按的是可打印字符時(shí),keyCode0charCode指的是你按下的字符的鍵值,當(dāng)你按的是不可打印字符時(shí),keyCode為按下的鍵的鍵值,charCode0

注意:功能鍵不會(huì)觸發(fā)keypress事件,因?yàn)?/span>keypress對(duì)應(yīng)的就是可打印的字符,但是有一點(diǎn)IEFF 中的區(qū)別,你按下一個(gè)字符鍵的同時(shí)按下alt鍵,在IE中不觸發(fā)keypress事件,但是在ff中可觸發(fā),我發(fā)現(xiàn)在IE中按下ctrl鍵的時(shí)候只有按下 q鍵會(huì)觸發(fā)事件其他的要么不會(huì)觸發(fā)事件,要么被瀏覽器IE自身捕獲了,例如你按下ctrl_A,全選某個(gè)東西,你按ctrl_S保存文件,但是在FF中就好多了,事件都是先傳遞到網(wǎng)頁,再向外傳遞

鑒于IEFF中的區(qū)別,如果你比較懶的話,建議只使用keydowkeyup事件,這兩種事件的使用在IEFF中基本上沒有區(qū)別,也不要捕獲ctrl_A等被瀏覽器定義為快捷鍵的事件

鍵盤事件event對(duì)象還有三個(gè)其他的屬性altKey, ctrlKey, and shiftKey 來判斷你按下一個(gè)鍵的時(shí)候是否按下了alt等鍵,這三個(gè)屬性使用比較簡單,三種事件都可以使用,也不存在ieff的兼容性問題

Prototype中的Event中又如下屬性:

  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,

以及下面的方法:

element(event) :返回觸發(fā)事件的元素
isLeftClick(event) :判斷是否按下的左鍵
pointerX(event) :事件觸發(fā)時(shí)鼠標(biāo)的橫坐標(biāo),對(duì)于非鼠標(biāo)事件,在ff中沒有此信息,但在ie中有?
pointerY(event):事件觸發(fā)時(shí)鼠標(biāo)所在位置的縱坐標(biāo)
stop(event):阻止事件向上傳播和瀏覽器的默認(rèn)處理方法
findElement(event, tagName) :找到觸發(fā)事件的元素的所有祖先元素中的tagNametagName的一個(gè)元素
observe(element, name, observer, useCapture):注冊(cè)事件處理函數(shù)
stopObserving(element, name, observer, useCapture):撤銷注冊(cè)的事件



------君臨天下,舍我其誰------