(
十一
).Prototype
(
1.5 rc2)
使用指南之
form
這一部分提供了很多與表單操作有關的功能,包括以下部分,當通過
$
方法返回元素時,可以直接通過
$(element).method()
調用:
Form
對象:提供了操作整個表單的一些方法
Form.Element
對象:提供了操作某個表單元素的方法
TimedObserver
類:周期性表單監視器,當表單元素值改變的時候執行一個回調函數,有
Form
和
Element
兩種類型
EventObserver
類:利用事件來監視表單元素,當表單元素值改變的時候執行一個回調函數,有
Form
和
Element
兩種類型
Form
對象:
reset(form)
:
form.reset()
serializeElements(elements)
:將
elements
中的元素序列化,就是返回指定的所有元素的
queryString
的形式,便于在
xmlhttp
或其他地方使用
serialize(form)
:序列化整個表單
getElements(form)
:返回表單的所有可序列化元素
getInputs(form, typeName, name)
:返回所有符合
typeName
和
name
的
input
元素
disable(form)
:使整個表單處于不可用狀態
enable(form)
:是整個表單可用
findFirstElement(form)
:返回類型為
'input’, ’select’, 'textarea’
的第一個可用的非隱藏元素
focusFirstElement(form)
:使
findFirstElement(form)
返回的元素得到焦點
Form.Element
對象:
focus(element) select(element)
:
html
元素內置方法的封裝,除了返回元素本身
serialize(element)
:序列化指定的表單元素,返回
key=value
的形式,返回的
string
已經
encodeURIComponent
了
getValue(element)
:返回元素的值
clear(element)
:清除元素的值
present(element)
:判斷元素的值是否非空
activate(element)
:使元素獲得焦點
disable(element)
:使元素不可用
enable(element)
:是元素可用
$F = Form.Element.getValue
方便使用
Form.Element.Observer
以及
Form.Observer
類:
周期性監視表單元素,如果表單或表單元素的值有改變時,執行執行一個回調函數,使用方式如下:
var oser=new Form.Element.Observer(element, frequency, callback)
or oser=new Form.Observer(form, frequency, callback)
callback
可以定義兩個參數
form/element
、
Form.serialize()/value
Form.Element.EventObserver
和
Form.EventObserver
類:
這兩個類跟上面的差不多,只是不是周期性的監視,而是利用元素的
change
或
click
事件來監視表單元素的變化,當發生變化時執行
callback
,參數跟上面一樣
?
(
十二
).Prototype
(
1.5 rc2)
使用指南之
event.js
在介紹
Prototype
中
Event
對象前先介紹一下瀏覽器中的事件模型,瀏覽器中的事件主要有
HTML
事件、鼠標事件和鍵盤事件,前兩種事件比較好理解,這里主要解釋一下鍵盤事件以及它在
IE
和
firefox
中的區別
鍵盤事件包括
keydown
、
kepress
和
keyup
三種,每次敲擊鍵盤都會
(
依次?
)
觸發這三種事件,其中
keydown
和
keyup
是比較低級的接近于硬件的事件,通俗的理解是這兩個事件可以捕獲到你敲擊了鍵盤中某個鍵;而
keypress
是相對于字符層面的較為高級點的事件,這個事件能夠捕捉到你鍵入了哪個字符??梢赃@樣理解,如果你敲擊了
A
鍵,
keydown
和
keyup
事件只是知道你敲擊了
A
鍵,它并不知道你敲的是大寫的
A(
你同時按下了
Shift
鍵
)
還是敲的是小寫
a
,它是以
"
鍵
"
為單位,你敲入了大寫的
A
,它只是當成你敲下了
shift
和
A
兩個鍵而已,但是
keypress
可以捕捉到你是敲入的大寫的
A
還是小寫的
a
還要理解一個概念是鍵盤中的鍵分為字符
(
可打印
)
鍵和功能鍵
(
不可打印
)
,功能鍵包括
Backspace, Enter, Escape, the arrow keys, Page Up, Page Down, and F1 through F12
等
下面說一下鍵盤事件的具體使用方法,
鍵盤事件的
event
對象中包含一個
keyCode
屬性,
IE
中只有這一個屬性,當為
keydown
和
keyup
事件是,
keycode
屬性表示你具體按下的鍵
(
也稱為
virtual keycode)
,當捕捉的是
keypress
事件時
keyCode
屬性指的是你鍵入的字符
(character code)
在
firefox
中情況有些不同,
event
對象包含一個
keyCode
屬性和一個
charCode
屬性,
keydown
和
keyup
事件的時候,
keyCode
表示的就是你具體按的鍵,
charCode
為
0
;當捕捉的是
keypress
事件時,
keyCode
為
0
,
charCode
指的是你按下的字符
當捕捉的是
keypress
事件時,
當你按的是可打印字符時,
keyCode
為
0
,
charCode
指的是你按下的字符的鍵值,當你按的是不可打印字符時,
keyCode
為按下的鍵的鍵值,
charCode
為
0
注意:功能鍵不會觸發
keypress
事件,因為
keypress
對應的就是可打印的字符,但是有一點
IE
和
FF
中的區別,你按下一個字符鍵的同時按下
alt
鍵,在
IE
中不觸發
keypress
事件,但是在
ff
中可觸發,我發現在
IE
中按下
ctrl
鍵的時候只有按下
q
鍵會觸發事件其他的要么不會觸發事件,要么被瀏覽器
IE
自身捕獲了,例如你按下
ctrl_A
,全選某個東西,你按
ctrl_S
保存文件,但是在
FF
中就
好多了,事件都是先傳遞到網頁,再向外傳遞
鑒于
IE
和
FF
中的區別,如果你比較懶的話,建議只使用
keydow
和
keyup
事件,這兩種事件的使用在
IE
和
FF
中基本上沒有區別,也不要捕獲
ctrl_A
等被瀏覽器定義為快捷鍵的事件
鍵盤事件
event
對象還有三個其他的屬性
altKey, ctrlKey, and shiftKey
來判斷你按下一個鍵的時候是否按下了
alt
等鍵,這三個屬性使用比較簡單,三種事件都可以使用,也不存在
ie
和
ff
的兼容性問題
在
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)
:返回觸發事件的元素
isLeftClick(event)
:判斷是否按下的左鍵
pointerX(event)
:事件觸發時鼠標的橫坐標,對于非鼠標事件,在
ff
中沒有此信息,但在
ie
中有?
pointerY(event)
:事件觸發時鼠標所在位置的縱坐標
stop(event)
:阻止事件向上傳播和瀏覽器的默認處理方法
findElement(event, tagName)
:找到觸發事件的元素的所有祖先元素中的
tagName
為
tagName
的一個元素
observe(element, name, observer, useCapture)
:注冊事件處理函數
stopObserving(element, name, observer, useCapture)
:撤銷注冊的事件