IE5+的 Behavior HTC文件
在以往DHTML中想要共用一段程式码时,都是使用include的方式把程式码放进来,如果该程式需配合Event的运作(如:在TextBox中的onKeyPress()),还得定义该Event发生时需要执行哪一段程式,这些都使得程式变得难看且不易维护。IE5有了Behavior后,我们可以定义某个元件有哪些Behavior(例如:该TextBox只能输入0-9 或该TextBox是输入病歷号,所以格式要对),只要我们事先把这些Behavior的程式写好,后面的程式只要定义元件(如:TextBox)有该Behavior就好了。
例如:
我们定义txtBirth只能输入 0-9(这是numInput.htc的程式所造成), 而numInput.htc内容如下
而以前的写法是:
而定义某个(些)元件有哪些Behavior除了上述方式也可以使用
<style>
input {font-family: Serif; font-size: 16px;color: #0000ff;behavior:url(numInput.htc)}
</style> 使所有的input tag者有numInput.htc定义的行为
<style>
.numInput {behavior:url(numInput.htc)}
</style> 使numInput Class者 有numInput.htc定义的行为
物件.style.behavior = "url(numInput.htc)";
物件.addBehavior = "url(numInput.htc)";
物件.addBehavior = "url(Behav2.htc)"; //令物件同时有 两种行为
物件.removeBehavior = "url(numInput.htc)" //去除某一Behavior
而同时有多个Behavior可以用
<INPUT type="text" id="txtBirth".... style="behavior: url(numInput.htc) url(Behav2.htc)">
Behavior不只可以像上面的例子,把元件某个Event发生时要执行的程式放到.htc之中,而
且它可以定义Method/Property/自行定义的Event 。在DHTML中网页预设物件是window,但
在behavior中,预设物件是该behavior所连结的物件,所以在behavior .htc档中若有style.color="red" ,是设定正在执行该Behavior的元件的color被设为红色,而不用在behavior
程式码中指定是哪个元件的style,所以程式码才能共用嘛。
以下是一个范例,含Event的Attach/自订Method/自订Property 但没有自订Event,自订Event与Behavior的进阶使用技巧请查模拟DataGrid
//numInput.htc
使用范例如下:
来源:http://www.hosp.ncku.edu.tw/java/behavior.htm
例如:
+展开
-HTML
<INPUT type="text" id="txtBirth" name="txtBirth" style="font-size:24px;behavior: url(numInput.htc)">
我们定义txtBirth只能输入 0-9(这是numInput.htc的程式所造成), 而numInput.htc内容如下
+展开
-HTML
<PUBLIC:COMPONENT URN="numInput">
<PUBLIC:ATTACH EVENT="onkeypress" HANDLER="doKeyPress" />
<SCRIPT LANGUAGE="Jscript">
function doKeyPress() {
if (event.keyCode>57 || event.keyCode < 48) {
event.returnValue = false;
}
}
script>
PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="onkeypress" HANDLER="doKeyPress" />
<SCRIPT LANGUAGE="Jscript">
function doKeyPress() {
if (event.keyCode>57 || event.keyCode < 48) {
event.returnValue = false;
}
}
script>
PUBLIC:COMPONENT>
而以前的写法是:
+展开
-HTML
<script>
function txtBirth_onkeypress() {
if (event.keyCode>57 || event.keyCode < 48) {
event.returnValue = false;
}
}
script>
<INPUT type="text" id="txtBirth" name="txtBirth" style="font-size:24px"
LANGUAGE=javascript onkeypress="return txtBirth_onkeypress()">
function txtBirth_onkeypress() {
if (event.keyCode>57 || event.keyCode < 48) {
event.returnValue = false;
}
}
script>
<INPUT type="text" id="txtBirth" name="txtBirth" style="font-size:24px"
LANGUAGE=javascript onkeypress="return txtBirth_onkeypress()">
而定义某个(些)元件有哪些Behavior除了上述方式也可以使用
<style>
input {font-family: Serif; font-size: 16px;color: #0000ff;behavior:url(numInput.htc)}
</style> 使所有的input tag者有numInput.htc定义的行为
<style>
.numInput {behavior:url(numInput.htc)}
</style> 使numInput Class者 有numInput.htc定义的行为
物件.style.behavior = "url(numInput.htc)";
物件.addBehavior = "url(numInput.htc)";
物件.addBehavior = "url(Behav2.htc)"; //令物件同时有 两种行为
物件.removeBehavior = "url(numInput.htc)" //去除某一Behavior
而同时有多个Behavior可以用
<INPUT type="text" id="txtBirth".... style="behavior: url(numInput.htc) url(Behav2.htc)">
Behavior不只可以像上面的例子,把元件某个Event发生时要执行的程式放到.htc之中,而
且它可以定义Method/Property/自行定义的Event 。在DHTML中网页预设物件是window,但
在behavior中,预设物件是该behavior所连结的物件,所以在behavior .htc档中若有style.color="red" ,是设定正在执行该Behavior的元件的color被设为红色,而不用在behavior
程式码中指定是哪个元件的style,所以程式码才能共用嘛。
以下是一个范例,含Event的Attach/自订Method/自订Property 但没有自订Event,自订Event与Behavior的进阶使用技巧请查模拟DataGrid
//numInput.htc
+展开
-HTML
<PUBLIC:COMPONENT URN="numInput">
<PUBLIC:ATTACH EVENT="onkeypress" HANDLER="doKeyPress" />
<PUBLIC:METHOD NAME="ProperID">
<parameter name="strID"/>
method>
<PUBLIC:METHOD NAME="ProperChartNo">
<parameter name="strChartNo"/>
method>
<PUBLIC:METHOD NAME="FormatStr">
<parameter name="intValue"/>
<parameter name="intLen"/>
method>
<PUBLIC:METHOD NAME="test" />
<PUBLIC:PROPERTY NAME="foreColor">
<put internalName="setForeColor"/>
<get internalName="getForeColor"/>
PROPERTY>
<PUBLIC:PROPERTY NAME="myAttribute" />
<SCRIPT LANGUAGE="Jscript">
function doKeyPress() {
if (event.keyCode>57 || event.keyCode < 48) {
event.returnValue = false;
}
}
function setForeColor(newColor) {
style.color = newColor;
}
function getForeColor() {
return style.color;
}
function test() {
alert("test");
}
script>
<SCRIPT LANGUAGE="VBscript">
Function FormatStr(byval vstrSource, byval intLen)
dim i, j, strTemp
vstrSource = value
intLen=8
strTemp = Trim(vstrSource)
i=len(strTemp)+1
for j=i to intLen
strTemp="0" & strTemp
next
FormatStr = strTemp
End Function
Function ProperID(ByVal UserID )
Dim AreaNo ,I
Dim CheckSum , AreaCode
UserID =UCase(UserID)
AreaCode = Left(UserID, 1)
ProperID = False
If Len(UserID)< 10 Then Exit Function '确定身证有10码
If (AreaCode < "A" Or AreaCode > "Z") Then Exit Function '确定首码在A-Z之间
If Not IsNumeric(Mid(UserID, 2)) Then Exit Function '确定2-10码是数字
'取得首码对应的区域码,A=10, B=11, ..H=17,I=34, J=18...
AreaNo = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", AreaCode) + 9
UserID =CStr(AreaNo) + Mid(UserID, 2)
'取得CheckSum的值
CheckSum = CLng(Mid(UserID, 1, 1)) + CLng(Mid(UserID, 11, 1))
For I = 2 To 10
CheckSum = CheckSum + CLng(Mid(UserID, I, 1)) * (11 - I)
Next
if (CheckSum mod 10 ) = 0 then
ProperID = True
else
ProperID = False
end if
End Function
Function ProperChartNo(ByVal vstrChartNo)
'判别输入的长度还有内容是否为一整数
ProperChartNo=false
If Len(vstrChartNo) = 8 And IsNumeric(vstrChartNo) Then
Dim intChartNo(7)
Dim intDigit
For intDigit = 0 To 7
intChartNo(intDigit) = cint(Mid(vstrChartNo, intDigit+1, 1))
Next
Dim lngCheckSum
lngCheckSum = intChartNo(0) * 1 + _
intChartNo(1) * 2 + _
intChartNo(2) * 3 + _
intChartNo(3) * 7 + _
intChartNo(4) * 2 + _
intChartNo(5) * 3 + _
intChartNo(6) * 7 + _
intChartNo(7) * 1
if (lngCheckSum Mod 10) = 0 then
ProperChartNo=true
else
ProperChartNo = False
end if
Else
ProperChartNo = False
End If
End Function
script>
PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="onkeypress" HANDLER="doKeyPress" />
<PUBLIC:METHOD NAME="ProperID">
<parameter name="strID"/>
method>
<PUBLIC:METHOD NAME="ProperChartNo">
<parameter name="strChartNo"/>
method>
<PUBLIC:METHOD NAME="FormatStr">
<parameter name="intValue"/>
<parameter name="intLen"/>
method>
<PUBLIC:METHOD NAME="test" />
<PUBLIC:PROPERTY NAME="foreColor">
<put internalName="setForeColor"/>
<get internalName="getForeColor"/>
PROPERTY>
<PUBLIC:PROPERTY NAME="myAttribute" />
<SCRIPT LANGUAGE="Jscript">
function doKeyPress() {
if (event.keyCode>57 || event.keyCode < 48) {
event.returnValue = false;
}
}
function setForeColor(newColor) {
style.color = newColor;
}
function getForeColor() {
return style.color;
}
function test() {
alert("test");
}
script>
<SCRIPT LANGUAGE="VBscript">
Function FormatStr(byval vstrSource, byval intLen)
dim i, j, strTemp
vstrSource = value
intLen=8
strTemp = Trim(vstrSource)
i=len(strTemp)+1
for j=i to intLen
strTemp="0" & strTemp
next
FormatStr = strTemp
End Function
Function ProperID(ByVal UserID )
Dim AreaNo ,I
Dim CheckSum , AreaCode
UserID =UCase(UserID)
AreaCode = Left(UserID, 1)
ProperID = False
If Len(UserID)< 10 Then Exit Function '确定身证有10码
If (AreaCode < "A" Or AreaCode > "Z") Then Exit Function '确定首码在A-Z之间
If Not IsNumeric(Mid(UserID, 2)) Then Exit Function '确定2-10码是数字
'取得首码对应的区域码,A=10, B=11, ..H=17,I=34, J=18...
AreaNo = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", AreaCode) + 9
UserID =CStr(AreaNo) + Mid(UserID, 2)
'取得CheckSum的值
CheckSum = CLng(Mid(UserID, 1, 1)) + CLng(Mid(UserID, 11, 1))
For I = 2 To 10
CheckSum = CheckSum + CLng(Mid(UserID, I, 1)) * (11 - I)
Next
if (CheckSum mod 10 ) = 0 then
ProperID = True
else
ProperID = False
end if
End Function
Function ProperChartNo(ByVal vstrChartNo)
'判别输入的长度还有内容是否为一整数
ProperChartNo=false
If Len(vstrChartNo) = 8 And IsNumeric(vstrChartNo) Then
Dim intChartNo(7)
Dim intDigit
For intDigit = 0 To 7
intChartNo(intDigit) = cint(Mid(vstrChartNo, intDigit+1, 1))
Next
Dim lngCheckSum
lngCheckSum = intChartNo(0) * 1 + _
intChartNo(1) * 2 + _
intChartNo(2) * 3 + _
intChartNo(3) * 7 + _
intChartNo(4) * 2 + _
intChartNo(5) * 3 + _
intChartNo(6) * 7 + _
intChartNo(7) * 1
if (lngCheckSum Mod 10) = 0 then
ProperChartNo=true
else
ProperChartNo = False
end if
Else
ProperChartNo = False
End If
End Function
script>
PUBLIC:COMPONENT>
使用范例如下:
+展开
-HTML
<html><head>
<META name=VI60_defaultClientScript content=JavaScript>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
script>
head>
<body>
<form method="POST" action="--WEBBOT-SELF--" onSubmit="" name="form1">
<INPUT type="text" id="txtBirth" name="txtBirth" maxlength=8 size=10
style="font-size:24px;behavior:url(numInput.htc)"
LANGUAGE=javascript onblur="return txtBirth_onblur()">
<input type="text" name="T1" size="20">
<input type="button" value="設定" name="B3" LANGUAGE=javascript onclick="return B3_onclick()">
form>body>html>
<META name=VI60_defaultClientScript content=JavaScript>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
script>
head>
<body>
<form method="POST" action="--WEBBOT-SELF--" onSubmit="" name="form1">
<INPUT type="text" id="txtBirth" name="txtBirth" maxlength=8 size=10
style="font-size:24px;behavior:url(numInput.htc)"
LANGUAGE=javascript onblur="return txtBirth_onblur()">
<input type="text" name="T1" size="20">
<input type="button" value="設定" name="B3" LANGUAGE=javascript onclick="return B3_onclick()">
form>body>html>
来源:http://www.hosp.ncku.edu.tw/java/behavior.htm
加支付宝好友偷能量挖...