Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

還有,別忘了瞧瞧全新經過改良的嗨,Scripting Guy!過往文件

今天的問題:如何取得清單方塊或下拉式清單選項的實際文字?


如何取得清單方塊或下拉式清單選項的實際文字?

嗨,Scripting Guy!在我的 HTA 中,該如何取得清單方塊或下拉式清單選項的實際文字?

-- MM

MM,您好。您可能很熟悉一首 Mac Davis 的老歌,那首歌開始是這樣唱的:
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,結果,值和文字最後還是不一樣。

附註:如果您對我們所說的完全沒有概念,簡單的說,HTA 提供一種方法讓指令碼有圖形化使用者介面。如果您對這有興趣 (HTA 也是可以很酷的),可以參閱 HTA Developers Center,尤其是關於建立 HTA 的教學課程


一般而言,值和文字不同這項事實並不太重要,除非您是要取得個別選項的文字。這辦得到嗎?我們的第一個反應是:不可能,想都別想。

不管怎麼樣,我們至少維持了我們完美的記錄:因為沒想到的確是有方法可以取得個別選項的文字。除此之外,甚至還不用對下拉式清單做什麼特殊的設定,只要存取選定選項的 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 對於表示謙虛可是一點問題也沒有…


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首