イベント処理に関するこの記事を最初に見て(誰かがより良いリファレンスを知っていますか?)、以下のコンテキストを取得します。
onclick属性で提供されるコードは、ユーザーがスパンで囲まれたテキストをクリックしたときに呼び出されます。このメカニズムは、コードの小さなスニペットには最適ですが、スクリプトが多いと面倒になります。このイベントメカニズムは、VBScriptとJScriptの両方で機能します。
舞台裏で行われるのは、Internet Explorerがスクリプトコードを使用してスクリプトエンジンを呼び出し、無名関数(名前のない関数)を作成するようにエンジンに指示することです。VBScriptは無名関数をサポートしていないため、VBScriptをご存知の方は、おそらくこれをどのように行うのか疑問に思っているでしょう。VBScriptは、実際には、スクリプトを含む「匿名」と呼ばれるサブルーチンを作成し、イベントに接続される関数へのポインターを返します。
次に、この.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>
見る
- それ/どのようにパラメータなしでSubを指定して、文字通りまたはGetRef(AまたはB)を介してクリックを処理することができますか
- 1つのパラメーター化されたSubを使用して、多くのボタンのクリックを処理できます。これは、エンジンがリテラルコードを匿名のSub(パラメーターなし)に配置するためです(C / D)
- GetRef( "SubWithLotsOfParms")を使用してonClick属性を設定することはできません。パラメータのないSubが必要です。
- パラメータのない名前付きSub(Magicなど)にエンジンの匿名の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
と
<!-- 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()で設定された変数の名前を、リテラルのサブ/関数名を使用するのとまったく同じように使用することは、昨日確立された可能性があります。