親密接觸單選按鈕、復(fù)選框和JavaScript的一些有趣的事情
我將以對(duì)象模型和一些常用對(duì)象開始,因?yàn)镴avaScript里的一切都是從對(duì)象展開的。記住,本文不只是關(guān)于JavaScript的,它是關(guān)于Notes/Domino中的JavaScript的。
窗口 窗口是對(duì)象模型的頂端對(duì)象。通常來說,窗口就是你的瀏覽器。如果你的窗口里有幀結(jié)構(gòu),那么每個(gè)幀結(jié)構(gòu)都依次是一個(gè)小窗口,包含在頂層窗口——瀏覽器中。我會(huì)在另一篇文章里談幀結(jié)構(gòu),現(xiàn)在,我們來看瀏覽器里只有一個(gè)Web頁面的情況。
窗口有它的屬性,比如它的地址(也就是它的URL),瀏覽器底部的狀態(tài)條上的文字等等;它也有方法,比如打開和關(guān)閉。通常來說,因?yàn)榇翱谠趯?duì)象層次的頂層,JavaScript就假設(shè)Window已經(jīng)存在了,你不必去刻意寫上它,也就是說“window.location”和“l(fā)ocation”的作用是相同的。
窗口里是Web頁面,它的對(duì)象層次從文檔(document)開始。你可以用Window.document來引用它,或者就是簡單的document。每個(gè)窗口只有一個(gè)文檔(document)。依據(jù)你的瀏覽器的不同,文檔(document)有幾個(gè)變化多樣的選項(xiàng)。在MSIE中,document.all數(shù)組包含了文檔(document)中所有的對(duì)象。在Netscape Navigator的某些版本中,你可以訪問document.layers數(shù)組。每一種瀏覽器關(guān)于對(duì)象的解釋都不一樣,但是表單數(shù)組(forms array)在所有的瀏覽器中都是可以訪問的。
理論上講,每個(gè)文檔(document)包含至少一個(gè)表單(form),但是可以包含多個(gè)。然而,在Notes中,除非明確寫出用來完成特定功能的HTML代碼(我從來沒那么做過),通常只有一個(gè)表單。但是,因?yàn)榭梢杂卸鄠€(gè)表單,所以你在引用表單時(shí),還是得通過數(shù)組元素來引用表單,下標(biāo)從0開始。不像LotusScript那樣,用圓括號(hào)來括住下標(biāo)數(shù)字,比如doc.CompanyName(0),在JavaScript中你通常會(huì)看到引用數(shù)組下標(biāo)的數(shù)字是括在方括號(hào)中的。因此,你應(yīng)該用下面的方式引用表單:
window.document.forms[0];
|
或者簡寫成:
嚴(yán)格來說,上面的方法并不是唯一引用表單的方式,下面都是引用表單的合法的表達(dá)式:
document.forms[0];
document.forms(0);
document.forms.0;
|
然而,你經(jīng)常看到的還是帶方括號(hào)的方式。注意,我在每行語句的末尾加了分號(hào),這是在JavaScript中和公式語言的相似之處之一。你應(yīng)該在每一條語句的末尾加上分號(hào)。和公式語言不同的是,在JavaScript中分號(hào)并不總是必需的。有些瀏覽器和其他瀏覽器比起來,它們可以運(yùn)行沒有分號(hào)的JavaScript語句,所以,盡管有時(shí)你可以不用加分號(hào),但是你最好養(yǎng)成每一條語句都加分號(hào)的習(xí)慣。
當(dāng)你接觸到表單后,你就已經(jīng)為訪問你最關(guān)心的元素做好了準(zhǔn)備。表單是域、按鈕、文本、圖像和其他元素的容器,你將在表單中用JavaScript來處理這些元素。
簡單的幾個(gè)元素 對(duì)于LotusScript,有件事值得一提:除了Rich-Text域外的元素,如文本、單選框、列表框、復(fù)選框等,你可以用幾乎相同的代碼取得它們的值。例如:如果有一個(gè)“Location”域,不論它是何種類型,你都可以用下面的LotusScript代碼取得它的值:
或者這樣:
fieldVals = doc.GetItemValue("Location")
|
在LotusScript中,域的類型對(duì)于你要取值(值數(shù)組)的代碼并不重要。不幸的是,這對(duì)于JavaScript并不適用。在JavaScript中,不同類型的域除了顯示選項(xiàng)(比如單選框、復(fù)選框或者文本)外,并不像在Notes里那樣,它們是不同的類型的對(duì)象,每一個(gè)都要用不同的方式去引用。其實(shí),那也不是絕對(duì)的,有些對(duì)象是相似的,但是引用過程并不像在LotusScript里那么流暢。你會(huì)發(fā)現(xiàn),你將花費(fèi)很多時(shí)間手動(dòng)尋找你的代碼中的域(名)錯(cuò)誤來使它們正常運(yùn)行,那看起來很糟糕。
你首先要知道的一點(diǎn)是:在JavaScript中,沒有所謂的Rich-Text域,在HTML中更沒有。Notes里提供了一個(gè)可以放在瀏覽器里的富文本Java(不是JavaScript)小程序,從而可以得到富文本的一些功能,但是你并不能用JavaScript來對(duì)它編程,而且它也不是一個(gè)真正的HTML對(duì)象類型。
更讓Notes開發(fā)人員驚訝的是,在Web上還沒有數(shù)字型或時(shí)間型的域。HTML的域都是文本型的。盡管你能用它們來收集數(shù)字信息,如數(shù)量或單價(jià),而保存的數(shù)據(jù)依然是文本。為了像數(shù)字一樣使用它,你必須把它轉(zhuǎn)換成數(shù)字類型。我將在后面詳細(xì)講解它。現(xiàn)在,要意識(shí)到一切都是文本,就像你在Notes的@Prompt對(duì)話框里輸入的信息一樣。

圖 1
建立表單 為了理解得更深入,你將在我的幫助下做一個(gè)小實(shí)驗(yàn)。打開Domino Designer,創(chuàng)建一個(gè)新表單,在表單上創(chuàng)建一個(gè)名為“Get editable field value” 的按鈕和一個(gè)名為“CreatedBy”的文本域,把此域的缺省值設(shè)成:@V3UserName(如圖1)。
如果你用R5的設(shè)計(jì)器(Designer),請(qǐng)把觸發(fā)按鈕的語言改成JavaScript。如果你像我一樣用R6的設(shè)計(jì)器(Designer),就要稍微麻煩一些。在Notes/Domino6(ND6)中,你可以像在瀏覽器中使用JavaScript一樣在Notes客戶端中使用JavaScript。更重要的是,同一個(gè)按鈕在不同的客戶端里能運(yùn)行不同的代碼。在圖2中,你將會(huì)看到一些選項(xiàng),你將決定所寫的代碼是在Notes(“客戶端”)還是在瀏覽器(“Web”)里運(yùn)行。

圖 2

圖 3
這個(gè)功能當(dāng)你在不同的環(huán)境里運(yùn)行不同的代碼時(shí)非常有用,但是當(dāng)你要在兩種環(huán)境里運(yùn)行同樣的代碼時(shí)怎么辦呢?當(dāng)然有比拷貝按鈕代碼更好的方法,你可以在右邊的下拉列表中選擇最下面的Common JavaScript來為兩種環(huán)境同時(shí)編寫代碼(如圖3)。
在本例中,選擇“Common JavaScript”。
在按鈕腳本中,輸入提示用戶CreatedBy域值的代碼。如果你看過前一篇文章,你就知道可以用點(diǎn)來分隔JavaScript里的各個(gè)層級(jí)元素。你的按鈕腳本應(yīng)該如下所示:
alert(document.forms[0].CreatedBy.value);
|
需要注意的是,JavaScript區(qū)分大小寫。這個(gè)規(guī)則不只對(duì)JavaScript元素(文檔、表單等)有效(首字母小寫),對(duì)域的名字同樣有效。你在域中用的什么大小寫效果,在代碼中必須如實(shí)反映。在瀏覽器中試驗(yàn)一下按鈕的功能[Design>Preview in Web Browser>Internet Explorer(或者你自己的瀏覽器)]。如果你使用Domino R6的設(shè)計(jì)器(Designer),你可以在Notes客戶端中進(jìn)行試驗(yàn)(Design>Preview in Notes)。

圖 4
如果你在用一個(gè)本地?cái)?shù)據(jù)庫進(jìn)行試驗(yàn)(對(duì)應(yīng)的是在服務(wù)器上),在瀏覽器中你看到的用戶名將是“Anonymous”,而不是你的名字,然而在Notes客戶端中卻是你的名字。原因是當(dāng)你用Web頁面的方式訪問本地?cái)?shù)據(jù)庫時(shí),你沒有登錄到服務(wù)器,瀏覽器不知道你是誰。但是在Notes中,不論是本地還是服務(wù)器,你必須登錄才能使用系統(tǒng)。這就是兩種客戶端之間微妙的差別。
另一個(gè)區(qū)別是在Web上沒有計(jì)算域,但并不意味著你不能在你的表單里加入計(jì)算域。你可以加入計(jì)算域,計(jì)算值將會(huì)在Web頁中顯示,除非域是隱藏的。關(guān)鍵是即使域就在那里顯示,而HTML通常的處理是沒有定義域。如果你把CreatedBy域改成計(jì)算域而不是可編輯的,在重新測試時(shí)你就會(huì)明白我所說的意思,你會(huì)得到和圖4類似的提示信息。
但是當(dāng)你在Notes客戶端(R6)里運(yùn)行時(shí),即使是計(jì)算域也沒有任何錯(cuò)誤。坦白地說,我還沒有對(duì)這個(gè)功能是好還是壞下結(jié)論,但那就是我們所得到的結(jié)果。
這里產(chǎn)生的錯(cuò)誤非常重要,你要開始理解JavaScript里產(chǎn)生的錯(cuò)誤,因?yàn)樗鼘?duì)你的代碼調(diào)試有很大的用處。那么當(dāng)它提示你“document.forms.0.CreatedBy.value”為null值或不是對(duì)象時(shí),意味著沒有得到你想要的數(shù)據(jù)。
當(dāng)你返回到瀏覽器里,在背景上單擊右鍵,選擇“查看源文件”時(shí),你會(huì)看到隱藏在Web頁面下的HTML代碼。你簡單瀏覽代碼時(shí),會(huì)看到對(duì)按鈕和計(jì)算域的引用,如下所示:
<input type="button" onclick="alert(document.forms[0].CreatedBy.value);" value="Get editable field value">
<p>Created By:Anonymous
|
當(dāng)你對(duì)頁面進(jìn)行過排版的話,你的代碼里可能會(huì)有字體、段落或其他的標(biāo)記混雜在按鈕和計(jì)算域的代碼里。那些是格式化文檔用的,在此處的討論中可以略過不看。注意看“Anonymous”是表單上的另一個(gè)單詞,它沒有任何的標(biāo)記在兩旁來提示你它是從域產(chǎn)生的。在源代碼中,Anonymous和“Created By”沒有任何區(qū)別:兩個(gè)在域前面的靜態(tài)文本(如果你已經(jīng)登錄,你將看到你的名字而不是Anonymous)。
為了比較一下,把CreatedBy域改回可編輯文本,保存表單,回到瀏覽器并刷新頁面,再看頁面的源文件,將會(huì)如下所示:
<input type="button" onclick="alert(document.forms[0].CreatedBy.value);" value="Get editable field value">
<p>Created by:<input name="CreatedBy" value="Anonymous">
|
代替單詞Anonymous(或是你的名字)的是域的HTML代碼(或者嚴(yán)格地講,是HTML的文本輸入框)。它的名字是“CreatedBy”,值是“Anonymous”。這些是通過JavaScript能取得的屬性,而普通的文本卻沒有這些屬性。所以你不能用JavaScript來引用計(jì)算域,至少在瀏覽器中如此。還有一點(diǎn)令人迷惑的就是當(dāng)文檔在非編輯狀態(tài)下時(shí),即使是可編輯域,也不能用JavaScript來引用它。換句話說,當(dāng)你保存了文檔再次打開,但沒有把它設(shè)置成編輯模式時(shí),頁面的HTML代碼將和CreatedBy域是計(jì)算域時(shí)相同。另外一個(gè)關(guān)于JavaScript的有趣的現(xiàn)象是:在Domino以外,我們沒有太多的機(jī)會(huì)去處理表單的編輯和非編輯狀態(tài),而對(duì)于我們Domino開發(fā)者來說,這可是個(gè)大問題。
你注意到按鈕和域都轉(zhuǎn)換成輸入對(duì)象了嗎?那就是HTML的工作方式。使人迷惑的是兩個(gè)對(duì)象都有value這個(gè)屬性。對(duì)于按鈕,value是“Get editable field value”,我想應(yīng)該是按鈕的標(biāo)簽,但是域的value值卻是它的實(shí)際值。一些其他類型的對(duì)象同時(shí)有value屬性和text屬性。如果你像我一樣,那么你有時(shí)就會(huì)搞不清楚什么是什么!就我的經(jīng)驗(yàn)而談,最簡單的辦法是讀Web頁面的HTML代碼。
多值 HTML的域沒有Notes的域那樣的多值屬性。可以試一下:在表單上加入第二個(gè)按鈕和第二個(gè)域。把域命名為“Letters”,類型為可編輯文本,選中“允許多值(Allow multiple values)”復(fù)選框。將默認(rèn)值寫成如下的字母列表:
"A":"B":"C":"D":"E":"F":"G"
|
把按鈕命名為“Get multiple values”并鍵入如下的JavaScript代碼:
alert(document.forms[0].Letters.value);
|
你可以用不同的分隔符來改變此域的值,但是當(dāng)你單擊按鈕時(shí),你會(huì)注意到,不論你用什么分隔符,提示你的總是域的所有值。這和在Notes客戶端中運(yùn)行的@Formulas和LotusScript形成了對(duì)比。用@Prompt,你得到的提示只是域的第一個(gè)值:“A”。你用LotusScript同樣也只能顯示一個(gè)值,但是你要指定數(shù)組下標(biāo),否則將得到一個(gè)錯(cuò)誤提示。公式和LotusScript都不能在提示語句中得到多值域的所有值。
原因就是,在Notes的語言中,確實(shí)有多個(gè)值在域中。對(duì)于HTML和JavaScript來說,只有一個(gè)值。再次看Web頁面的源代碼你會(huì)發(fā)現(xiàn)和下面類似的代碼:
<input name="Letters" value="A;B;C;D;E;F;G">
|
注意它的值是用“一對(duì)”雙引號(hào)引起來的帶分隔符的值。以后將會(huì)詳細(xì)討論如何分隔單獨(dú)的值,但現(xiàn)在,你應(yīng)該意識(shí)到多值在Web上并不是確切的多值(至少對(duì)于文本輸入框是如此)。其他類型域的處理方式和文本域?qū)?huì)不同。
單選按鈕 另一個(gè)有趣的地方是單選按鈕,就Notes和Web頁面而言,Notes里的單選按鈕是一個(gè)有多個(gè)值的單個(gè)域,在Web上是同名的輸入文本框的數(shù)組。為了理解以上所述,請(qǐng)看下面的例子:
在表單上,加入另一個(gè)新域,名字為“RadioButtn”。正像它的名字一樣,把它改成單選框類型的域。在域?qū)傩源翱诘牡诙€(gè)標(biāo)簽中,輸入下列選項(xiàng)和別名(圖5):

圖 5
One | A
Two | B
Three | C
Four | D
|
把此域的缺省值設(shè)成第一個(gè)選項(xiàng)的別名,也就是帶引號(hào)的字母“A”。現(xiàn)在在瀏覽器里預(yù)覽表單,再看源文件,你會(huì)看到單選按鈕的代碼和正常域的代碼有很大區(qū)別。HTML代碼看起來將和下面的類似:
<input type="radio" name="RadioButtn" value="A" checked>One<br>
<input type="radio" name="RadioButtn" value="B">Two<br>
<input type="radio" name="RadioButtn" value="C">Three<br>
<input type="radio" name="RadioButtn" value="D">Four
|
在這里你要注意一些要點(diǎn)。首先,所有的4個(gè)單選按鈕對(duì)象有同一個(gè)名字:RadioButtn,這樣一來,HTML和JavaScript就知道它們是同一個(gè)數(shù)組里的對(duì)象。其次,每個(gè)選項(xiàng)的值是選項(xiàng)的別名,并不是看到的文字(例如“One”、“Two”等)。這和在Notes中保存的是別名是一樣的,保存的不是看到的文本(當(dāng)然如果沒有別名的話,保存的值和文本就是一樣的了)。最后,你選中第一個(gè)選項(xiàng)的方法是在HTML語句中用的“checked”單詞,它被加在了第一個(gè)單選按鈕的語句里。
如果你再加入另外的一個(gè)按鈕,用和取其他兩個(gè)域值同樣的方法來取RadioButtn的值的話,你會(huì)得到一個(gè)奇怪的錯(cuò)誤,也就是用下面的代碼:
alert(document.forms[0].RadioButtn.value);
|
你將會(huì)看到一個(gè)提示“undefined”的錯(cuò)誤對(duì)話框(如圖6)。

圖 6
這里的問題并不是沒有定義它的值。畢竟如上面所示,單選按鈕的代碼中共有4個(gè)值。也就是說,問題出在RadioButtn本身,至少是現(xiàn)在用在這里的那個(gè)。單選按鈕是一個(gè)輸入選項(xiàng)的數(shù)組,如果你想要知道其中一個(gè)元素的值,必須指定是哪一個(gè),試試下面的代碼:
alert(document.forms[0].RadioButtn[0].value);
|
好,返回的是當(dāng)前域的值“A”,但是當(dāng)你選擇其他的選項(xiàng)時(shí)再單擊按鈕,你得到的依然是“A”,而不是你所選擇的值,還是不太妙。
為了得到選擇的選項(xiàng)的值,首先要知道哪個(gè)選項(xiàng)被選中了,然后在alert語句中,用那個(gè)選中的選項(xiàng)的下標(biāo)值來正確地引用當(dāng)前選項(xiàng)的值。也就是說,如果第一個(gè)選項(xiàng)被選中,你應(yīng)該取RadioButtn[0].value,如果第二個(gè)選項(xiàng)被選中,你就應(yīng)該取RadioButtn[1].value,依此類推。
在JavaScript中,某些類型的域具有selectedIndex屬性,代表當(dāng)前選中選項(xiàng)的數(shù)組下標(biāo)值。然而單選按鈕并不是那么幸運(yùn),同樣,復(fù)選框也沒能逃脫厄運(yùn)。要想得到當(dāng)前選中的單選按鈕的值,你必須在RadioButtn數(shù)組元素中查找“checked”屬性。和LotusScript相比,LotusScript就能像操作其他類型的域一樣來取得單選按鈕當(dāng)前被選中的值。這是一件非常麻煩的事,但是,它就是那樣的。
下面是按鈕的代碼:
var doc = document.forms[0];
for(i = 0; i <
doc.RadioButtn.length; i++){
if(doc.RadioButtn[i].checked){
alert(doc.RadioButtn[i].value);
break;
}
}
|
這里馬上就出現(xiàn)了幾個(gè)新概念,讓我花點(diǎn)兒時(shí)間來解釋一下。首先,如果你讀過前面那篇文章,你就會(huì)知道“var”是在JavaScript里用來聲明變量或給變量賦值用的,就好比LotusScript里的“Dim”和“Set”。既然這樣,為了避免一遍一遍地輸入document.forms[0],我就把document.forms[0]賦給變量doc以備后用:
var doc = document.forms[0];
|
下面是循環(huán),循環(huán)體中沒有代碼時(shí)的樣子如下:
for(i = 0; i < doc.RadioButtn.length; i++){
}
|
你是不是有點(diǎn)眼花繚亂?我以前每次看到類似這樣的代碼就眼暈,但是它并不像它看起來那么糟。首先,花括號(hào)只是用來包含循環(huán)體的。JavaScript的for循環(huán)有三個(gè)選項(xiàng):
- 計(jì)數(shù)變量以及它的初始值(i=0);
- 如何知道繼續(xù)循環(huán)(i < doc.RadioButtn.length);
- 如何累計(jì)計(jì)數(shù)變量(i++)。
首先是i=0,很簡單,我使用了變量i并且它的初始值為0。
第二部分:i<doc.RadioButtn.length ,它可有點(diǎn)兒不太直觀。JavaScript的length屬性具有不同的使用環(huán)境,如果你要檢查一個(gè)普通文本域的length,比如在表單上的CreatedBy域(document.forms[0].CreatedBy.length),你會(huì)發(fā)現(xiàn)length是域中文本的字符個(gè)數(shù)。比如Anonymous,length就是9。對(duì)于數(shù)組,比如RadioButtn數(shù)組,length是數(shù)組中元素的個(gè)數(shù)。不像數(shù)組下標(biāo)那樣從0開始,length從1開始。因此,如果RadioButtn數(shù)組的最后一個(gè)元素下標(biāo)是3,length的值就是4。在循環(huán)中,我讓i從0開始計(jì)數(shù)循環(huán),直到它小于4為止。因此,循環(huán)體共循環(huán)4次,i的值分別是0,1,2,3,以數(shù)組的最后一個(gè)元素的下標(biāo)結(jié)束(我承認(rèn)有點(diǎn)兒混亂)。
循環(huán)體中的第三個(gè)參數(shù):i++,對(duì)于LotusScript開發(fā)人員來說是一個(gè)低級(jí)錯(cuò)誤。這是在JavaScript中的簡寫方式,i++的值和i=i+1的值是一樣的。實(shí)際上,你可以在循環(huán)中用兩種形式的任何一種,所以下面這種寫法和上面的寫法是等價(jià)的:
for(i = 0; i < doc.RadioButtn.length; i = i + 1){
}
|
i=i+1同樣可以正常運(yùn)行,但是問題是沒有人那么做,因?yàn)槟懔?xí)慣i++后,它更短小、更簡單。它的價(jià)值在于,你還可以寫i--,和i=i-1是一樣的,當(dāng)然,在這個(gè)循環(huán)里它不能運(yùn)行。用i++你還可以做許多看起來很有趣的事情,但那是以后的事了。
再來看循環(huán):三個(gè)參數(shù)用分號(hào)分隔并由圓括號(hào)包圍,循環(huán)體代碼用花括號(hào)包圍,循環(huán)體中是一個(gè)if語句:
if(doc.RadioButtn[i].checked){
}
|
這里的判斷真假的語句同樣也用圓括號(hào)包圍。試驗(yàn)中的doc.RadioButtn[i].checked看起來沒有提供充足的信息,但它和循環(huán)一起構(gòu)成了一個(gè)JavaScript的簡寫方式。如果用LotusScript的方式呢?我首先會(huì)去檢查當(dāng)前的RadioButton元素是不是等于checked,像下面的方式:
doc.RadioButton[0] = "checked"
|
由于checked是一個(gè)屬性而不是一個(gè)值,所以上面的代碼不能正確運(yùn)行。你還會(huì)注意到在HTML中它并沒有用引號(hào)引起來。其實(shí),checked是一種"是"或者"不是"的東西。更準(zhǔn)確一點(diǎn)說,它不是真就是假,所以那個(gè)if語句的意思就是:如果RadioButtn的這個(gè)元素是checked(被選中的),即:為真,那么就做下面的事情……這里的試驗(yàn)看起來有點(diǎn)奇怪,因?yàn)槭冀K沒有提到真假。如果那讓你感到不舒服,你還可以很輕松地這樣寫if語句:
if(doc.RadioButtn[i].checked == true){
}
|
注意這里的true全部是小寫而且有兩個(gè)等號(hào)。和LotusScript中不同,JavaScript里的等號(hào)(=)只是用來把一個(gè)值賦給另一個(gè)什么東西:
var doc = document.forms[0];
|
為了比較兩個(gè)項(xiàng)目是否相等,你必須使用兩個(gè)等號(hào)。在我的頭腦里,我想它的意思是:doc.RadioButtn[i].checked 等于true,這樣來幫我記住要用兩個(gè)等號(hào)。雙符號(hào)標(biāo)記同樣適用于&符號(hào)(使用一個(gè)時(shí)用來追加或連接字符;使用兩個(gè)時(shí)表示“and”,比如在一個(gè)if語句里用兩個(gè)判斷條件時(shí))。
最后,在if語句里是一個(gè)alert語句,緊跟著一個(gè)break。break就是JavaScript里的Exit For。它終止循環(huán),因?yàn)橐粋€(gè)單選按鈕只能有一個(gè)選項(xiàng)被選中。
如果你把所有的代碼都放入按鈕里,你就會(huì)看到無論你選擇單選按鈕的哪個(gè)選項(xiàng),單擊按鈕后都能正確的顯示出選項(xiàng)的值。非常棒,現(xiàn)在你對(duì)JavaScript已經(jīng)入門了。
復(fù)選框
復(fù)選框和單選按鈕類似。在表單上,復(fù)制單選按鈕域并改名為"CheckBx",更改域的類型為"CheckBox(復(fù)選框)",保存表單,刷新Web頁面并查看源文件。你將看到復(fù)選框的HTML代碼和RadioButtn的幾乎一模一樣:
<input type="checkbox" name="CheckBx" value="A" checked>One<br>
<input type="checkbox" name="CheckBx" value="B">Two<br>
<input type="checkbox" name="CheckBx" value="C">Three<br>
<input type="checkbox" name="CheckBx" value="D">Four
|
真正的區(qū)別不是域名,而是類型是復(fù)選框,不是單選按鈕。另外一個(gè)區(qū)別就是你可以選擇復(fù)選框中的多個(gè)值,盡管你還要像操作單選按鈕那樣遍歷整個(gè)復(fù)選框來確定哪個(gè)選項(xiàng)被選中,但是你不能在全部檢查完是否選中之前停止遍歷動(dòng)作。按鈕中用來檢查復(fù)選框選中的代碼會(huì)像下面的樣子:
var doc = document.forms[0];
for(i = 0; i < doc.CheckBx.length; i++){
if(doc.CheckBx[i].checked){
alert(doc.CheckBx[i].value);
}
}
|
我確信到現(xiàn)在為止,你應(yīng)該多多少少熟悉這些代碼了,因?yàn)檫@和單選按鈕基本一樣,除了域名的改變和去掉了"bread"語句。在一個(gè)實(shí)用的程序中,這些代碼所做的工作比我做的要多得多,但是首先我希望你很舒服地學(xué)完這些基本內(nèi)容。
等待更多的對(duì)象 你還有幾個(gè)類型的域需要了解,每一種都有自己的特性,但那是另一篇文章的素材。現(xiàn)在,你可能要用自己的試驗(yàn)來熟悉這里的例子了。你也可能要向表單中加入更多的、我還沒有涉及到的域,并查看它們的HTML源文件,那是我們下次的開始部分,再見。
參考資源
- 本文摘自 2003.6 《Lotus Magazine 簡體中文版》:《Lotus Magazine 簡體中文版》作為國內(nèi)第一個(gè)專注于IBM Lotus技術(shù)的刊物,其內(nèi)容主要源自美國Lotus方面的相關(guān)頂級(jí)技術(shù)刊物,面向廣大Lotus管理及開發(fā)人員,向您展示最新最前沿的Lotus相關(guān)技術(shù)。歡迎 申請(qǐng)贈(zèng)閱。
- Lotus相關(guān)專題 :如果您是對(duì)Lotus感興趣的開發(fā)人員,想進(jìn)一步了解Lotus產(chǎn)品家族,熟悉Lotus產(chǎn)品是如何和IBM其他的產(chǎn)品一起協(xié)同工作的,Lotus是如何支持諸如XML、Web服務(wù)等等業(yè)界的開放標(biāo)準(zhǔn)的,如何用Lotus進(jìn)行J2EE的開發(fā),即刻訪問 IBM developerWorks 中國網(wǎng)站的 Lotus相關(guān)專題 。在這里,我們?yōu)槟氖占讼嚓P(guān)的文章、教程、紅皮書,相信對(duì)您的開發(fā)會(huì)有所幫助。
|