首先看at this article about event handling(有人知道一個更好的參考?)以獲取上下文:
在onclick屬性提供的代碼將被調用時,該文本 用戶點擊包含在跨度。對於小代碼片段,這種機制非常好,但是如果您有大量腳本,則會變得非常麻煩。該事件機制可以與VBScript和JScript一起使用。
幕後發生的事情是,Internet Explorer使用腳本代碼調用 腳本引擎,並通知引擎創建一個匿名函數(一個沒有名字的函數) 。那些知道 VBScript的人可能想知道它是如何做到這一點的,因爲VBScript 不支持匿名函數。 VBScript實際上創建了一個名爲「anonymous」的 子例程,其中包含該腳本,並返回一個指向該函數的指針,然後將其連接到該事件。
然後用此名.hta實驗:
<html>
<!-- !! http://stackoverflow.com/questions/10741292/vbscript-getref-with-parameter
-->
<head>
<title>GetRef HTA</title>
<HTA:APPLICATION
APPLICATIONNAME="GetRef HTA"
>
<SCRIPT Language="VBScript">
Sub SetClickHandlers()
Set bttB.onClick = GetRef("NoParmsBttB")
Set bttE.onClick = GetRef("Magic")
Set bttF.onClick = GetRef("Magic")
End Sub
' trivial handler, literally set
Sub NoParmsBttA()
Log "NoParmsBttA() called."
End Sub
' trivial handler, set via GetRef
Sub NoParmsBttB()
Log "NoParmsBttB() called."
End Sub
' one handler for many buttons, literally set
Sub handleClickCD(oBtt)
Log "handleClickCD() called; you clicked " & oBtt.id
End Sub
' one handler for many buttons, set via Magic() & GetRef
Sub handleClickEF(oBtt, dtWhen)
Log "handleClickEF() called; you clicked " & oBtt.id & " at " & CStr(dtWhen)
End Sub
' stuffed via GetRef into onClick
Sub Magic()
handleClickEF Me, Now
End Sub
Sub Log(s)
MsgBox s, 0, Now
End Sub
</SCRIPT>
</head>
<body onLoad="SetClickHandlers">
<!-- literal onClick handler in html code -->
<button id="bttA" onClick="NoParmsBttA">A</button>
<!-- no literal onClick handler, will be set by SetClickHandlers via GetRef() -->
<button id="bttB">B</button>
<!-- literal onClick handlers with parameter (Me, i.e. the Button) -->
<button id="bttC" onClick="handleClickCD Me">C</button>
<button id="bttD" onClick="handleClickCD Me">D</button>
<!-- Two params handler via SetClickHandlers & Magic -->
<button id="bttE">E</button>
<button id="bttF">F</button>
</body>
</html>
看到
- 說/你怎麼可以指定不PARAMS一個子字面上或通過GetRef(A RESP處理點擊。 B)
- 您可以使用一個參數化Sub來處理對許多按鈕的點擊,因爲引擎會將文字代碼放入匿名Sub(不帶參數)(C/D)
- 你不能使用GetRef(「SubWithLotsOfParms」)來設置onClick屬性 - 它需要s Sub沒有參數
- 你可以讓一個沒有參數的命名Sub魔術師)做引擎的匿名工作;本款則可以GetRef
WRT薩爾曼A的回答中:
如果你真的需要一個錯誤信息,如:
---------------------------
Error
---------------------------
A Runtime Error has occurred.
Do you wish to Debug?
Line: 54
Error: Wrong number of arguments or invalid property assignment: 'mySub'
---------------------------
Yes No
---------------------------
,那麼你只需要添加:
Sub mySub(parameter)
alert(parameter.toString())
End Sub
and
<!-- literal onClick handler in html code -->
<button id="bttG" onClick="mySub">G</button>
來測試.hta。
WRT彼得的建議 - 它支付保持簡單:
Option Explicit
Sub WithLotsOfParms(a, b, c, d)
WScript.Echo Join(Array(a, b, c, d))
End Sub
Dim f : Set f = GetRef("WithLotsOfParms")
WithLotsOfParms 1, 2, 3, 4
f 1, 2, 3, 4
輸出:
cscript 01.vbs
1 2 3 4
1 2 3 4
您使用與GetRef(設置變量的名稱),完全按照你使用文字子/功能名稱可能昨天已經建立。
你爲什麼使用VBScript進行客戶端腳本?您定位了哪些瀏覽器? –
純粹的IE瀏覽器,順便說一句,它是純粹的VBScript目的(.vbs),我只是把這個例子在客戶端browseerscript,以清楚我想要什麼。我知道對IE和Vbscript的偏見作爲語言,但在唯一的IE公司ActiveX是一個祝福,JavaScript是好的。但是在一個安全的環境中這麼該死的有限。我使用了大量的js進行web開發,其餘的我想切換到Ruby,但我的同事必須遵循當然 – peter