Oh Lord it's hard to be humble
When you're perfect in every way
無可否認地,Scripting Guys 並非十全十美。不過,撇開謙虛不談,我們在某個領域倒是有無懈可擊的完美記錄:對《嗨,Scripting Guy!》每個疑問所做出的第一個反應永遠是錯的。
您的問題就是一個很完美的例子。當您將下拉式清單加入 HTA (HTML Application) 時,使用的是與此類似的程式碼:
<select size="1" name="OptionChooser" onChange="TestSub">
<option value="0"></option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
如您所見,我們的下拉式清單包含幾個選項 (出現在清單中的實際項目),而且每個選項都有一個唯一值。拿第二個選項來說,實際上出現在下拉式清單的文字是 Option 1,但是「值」(一般由指令碼所使用的項目) 卻是 1。值和文字不一定要不一樣,可是通常都不一樣,而且大多時候也必須不一樣。舉例來說,在一個網站的下拉式清單中,您可能希望文字顯示為 Script Center,即使值應該是要 Script Center URL,結果,值和文字最後還是不一樣。
一般而言,值和文字不同這項事實並不太重要,除非您是要取得個別選項的文字。這辦得到嗎?我們的第一個反應是:不可能,想都別想。
不管怎麼樣,我們至少維持了我們完美的記錄:因為沒想到的確是有方法可以取得個別選項的文字。除此之外,甚至還不用對下拉式清單做什麼特殊的設定,只要存取選定選項的 InnerText 屬性就行了。這裡有一個副程式,可擷取下拉式清單 (一個我們名為 OptionChooser 的清單) 中選定選項的 InnerText 屬性。
Sub TestSub
For Each objOption in OptionChooser.Options
If objOption.Selected Then
Msgbox objOption.InnerText
End If
Next
End Sub
為了取得該值,我們設定了一個 For Each 迴圈,對下拉式清單的 Options 集合執行迴圈 (您可能已經猜到,Options 集合是由下拉式清單內所包含的所有選項所組成)。我們檢查每個個別的選項,看 Selected 屬性是否為 True,這正是這行程式碼所做的:
If objOption.Selected Then
若 Selected 為 True,表示這是已選取的選項。接著會使用這行程式碼將 InnerText 屬性的值顯示在訊息方塊中:
Msgbox objOption.InnerText
若 Selected 為 False,就重複迴圈,檢查集合中的下一個選項。
沒錯,就是這麼簡單,即使我們的第一個反應是「辦不到」。如果您想要自己試試看,這裡有一些 HTA 程式碼示範這套方法。將程式碼複製並貼到記事本中,然後以 .hta 為副檔名來儲存檔案:
<html>
<head>
<title>HTA Test</title>
<HTA:APPLICATION
ID="objTest"
APPLICATIONNAME="HTATest"
SCROLL="no"
SINGLEINSTANCE="yes"
>
</head>
<SCRIPT LANGUAGE="VBScript">
Sub TestSub
For Each objOption in OptionChooser.Options
If objOption.Selected Then
Msgbox objOption.InnerText
End If
Next
End Sub
</SCRIPT>
<body>
<select size="1" name="OptionChooser" onChange="TestSub">
<option value="0"></option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</body>
您是知道的,人要是完美無缺,要謙虛是很難的。不過,基於某種原因,Scripting Guys 對於表示謙虛可是一點問題也沒有… |