먼저 살펴 at this article about event handling (사람이 더 나은 참조를 아는 사람?)에 대한 컨텍스트 얻을 : 텍스트에 사용자가 클릭 묶인 때
온 클릭 속성에서 제공하는 코드가 호출됩니다 범위. 이 메커니즘은 작은 코드 스 니펫의 경우 이 우수하지만 많은 스크립트가있을 때 번거로워집니다. 이 이벤트 메커니즘은 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>
는 말 그대로 또는 GetRef (A RESP를 통해 클릭을 처리하기 위해 매개 변수없이와 하위를 지정할 수 있습니다 어떻게/
- 볼 수 있습니다. B)
- 엔진이 리터럴 코드를 익명 Sub (매개 변수 없음) (C/D)
에 넣기 때문에 하나의 매개 변수가있는 Sub를 사용하여 많은 버튼 클릭을 처리 할 수 있습니다.
- GetRef ("SubWithLotsOfParms")를 사용하여 onClick 속성을 설정할 수 없습니다. 매개 변수가없는 Sub가 필요합니다.
- 매개 변수없이 이름이 지정된 Sub를 사용할 수 있습니다. Magic)은 익명의 엔진 작업을 수행합니다. 당신이 정말로 오류 메시지가 필요한 경우처럼
: 다음 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.
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
출력
:
당신이 GetRef (설정 변수의 이름을 사용하는 것이
cscript 01.vbs
1 2 3 4
1 2 3 4
) 당신이 문자를 사용 그대로 -
은 는
WRT 피터의 제안은 간단하게 지급합니다 하위/함수 이름이 어제에 설정되었을 수 있습니다. 여기
왜 클라이언트 측 스크립팅에 VBScript를 사용하고 있습니까? 어떤 브라우저를 타겟팅하고 있습니까? –
순수 IE, btw 그것은 순수한 vbscript 목적 (.vbs)입니다, 나는 단지 내가 원하는 것을 명확하게하기 위해 clientside browseerscript에서이 예제를 취했습니다. 나는 IE와 Vbscript에 대한 편견을 언어로 알고 있지만, IE 회사의 ActiveX는 축복이다. javascript는 괜찮습니다. 하지만 안전한 환경에서 그렇게 제한되어 있습니다. 나는 webdevelopment를 위해 js를 많이 사용하고 나머지는 Ruby로 전환하고 싶지만 동료는 물론 파라미터 전달 문제를 우회하는 창조적이고 유용한 방법으로 – peter