IE5+的 Behavior HTC文件

  在以往DHTML中想要共用一段程式码时,都是使用include的方式把程式码放进来,如果该程式需配合Event的运作(如:在TextBox中的onKeyPress()),还得定义该Event发生时需要执行哪一段程式,这些都使得程式变得难看且不易维护。IE5有了Behavior后,我们可以定义某个元件有哪些Behavior(例如:该TextBox只能输入0-9 或该TextBox是输入病歷号,所以格式要对),只要我们事先把这些Behavior的程式写好,后面的程式只要定义元件(如:TextBox)有该Behavior就好了。

例如:

+展开
-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>


  而以前的写法是:
+展开
-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()">

 

  而定义某个(些)元件有哪些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>


使用范例如下:

+展开
-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>

来源:http://www.hosp.ncku.edu.tw/java/behavior.htm

加支付宝好友偷能量挖...


评论(0)网络
阅读(145)喜欢(0)HTML/CSS兼容/XML