( 十一 ).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)
:撤銷注冊的事件