搜索窗口

  一直觉得遇到输入框很多,而且都有检查其有效性的,代码很冗余,尤其是每个输入框都写一个点击旁边窗口,搜索出所有可以输入的合法值,选则其一,然后便输入到输入框,如果用户自己输入,还有写一个onblur的事件来检测输入的有效性,然后每个页面可能有类似的输入类别,但是由于不同的页面,也有写一套,这样下来,我发觉我每天都在copy代码,然后每修改一个逻辑,要修改n个程式!写了那么多,终于有点经验,现在整理,仅供参考!

像下图的测试法规:我就是这样来做!

我所有的asp程式都放在asp/文件夹,公用的javascript放在js/文件夹的jsPublic,然后如果是单个页面自己的js,我就写在该asp页面里面!

 

1.触发事件

我有2个表,有效值类别档FIELDVALIDITY,有效值明细档FIELDVALIDITYDETAIL!这里记录我所有可以检测输入合法值的类别和值等信息。这样不管是哪个输入框,我都是点击查询图标后触发:查询窗口

          <img src="../images/Search.gif" width="21" height="22" align="bottom" style="CURSOR: hand"  οnclick="Hlp_ValidityID('txtDALaws','TestingOrdinance');"></td>

          <img src="../images/Search.gif" width="21" height="22" align="bottom" style="CURSOR: hand"  οnclick="Hlp_ValidityID('txtDALaws','TestingOrdinance');"></td>

 

Hlp_ValidityID函式的定义是放在jsPublic里面,也就是任何页面都可以调用,代码如下:

function Hlp_ValidityID(objNam,objTyp){  //objNam:對象名稱;objTyp:對象值類型

        var Mywin=window.open('Hlp_ValidityID.asp?objNam=' + objNam + '&objTyp=' + objTyp,'_blank','direction=0,scrollbars=1,toolbar=0,menubar=0,resizable=0,status=0,width=500,height=400,left=0,top=0');

        if (Mywin.opener==null) Mywin.opener=self;

}

 

2. 查询窗口

调用时候,只要传入我们要检测的输入objNam:對象名稱,就是输入框的name;objTyp:對象值類型-à就是要检测的输入字段的值的类别,是FIELDVALIDITY表里面记录的ValidityID这个字段的值,是pk字段!

 

开窗查询的程式是Hlp_ValidityID.asp

<%Option Explicit%>

<!-- #include virtual="/include/adovbs.inc" -->

<!-- #include virtual="/include/DataBase.fun" -->

<!-- #include virtual="/include/Pub_Function.fun" -->

<!-- #include file="../include/Impact_TS_InfoChk.fun" -->

<%

'**********************************************************************

 '*AUTHOR:        MabelDeng

 '*CREATE:        2005/09/19

 '*NAME:        撞擊測試申請之新增

 '**********************************************************************

 %>

<%

dim objTyp                              '要查詢的字段類型

dim objNam                  '要寫入字段的名稱

dim Title                             '要查詢字段的描述

dim strSQL,DBConn

dim Rs,RsH

 

Set DBConn = Application("DBConn")

objTyp = request.QueryString("objTyp")  '要查詢之控件類型

objNam = request.QueryString("objNam")        '要塞值之控件名

Title =""

strSQL="select ValidityExp from FIELDVALIDITY where ValidityID='"& objTyp &"'"

set RsH=server.createobject("ADODB.RecordSet")

RsH.open strSQL,DBConn

if not RsH.eof then

   set Title = RsH("ValidityExp")

end if

strSQL="select D.ValidityTyp,D.ValidityDesc from FIELDVALIDITY H inner join FIELDVALIDITYDETAIL D " &_

       "on H.ValidityID = D.ValidityID where H.ValidityID = '"& objTyp &"'"

set Rs=server.createobject("ADODB.RecordSet")

Rs.open strSQL,DBConn

%>

<HTML>

<HEAD>

<meta http-equiv="Content-Type" content="text/html; charset=big5">

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

 

<title>[<%=Title%>]</title>

<link rel="stylesheet" href="../CSS/Cert_Test_Style.css" type="text/css">

</HEAD>

<Script Language="javascript">

function RetVal(objNam,ReturnValue){

        if (!opener.closed){  //父窗口未關掉,Refresh

                opener.document.all(objNam).value = ReturnValue;

                opener.document.all(objNam).focus();

        }

        self.close();

}

</Script>

 

<BODY>

<Center>

        <Table width="90%" height="67" border="0" cellpadding="1" cellspacing="1" bgcolor="#000000">

                <TR align="left">

                        <TD height="23" colspan="2" bgcolor="#3e86ff"><span class="style3"><%=Title%></span></TD>

                </TR>

                <TR>

                  <TD bgcolor="#FFFFFF" height="20">欄位值</TD>

                  <TD bgcolor="#FFFFFF">欄位描述</TD>

           </TR>

                <%

                if Rs.eof then

                        Response.Write "<Center><a href='javascript:self.close();'>沒有符合的資料!</a></Center>"

                else 

                        do until Rs.eof

                %>

 

                                <TR>

                                        <TD width="25%" bgcolor="#FFFFFF" height="20"><a href="javascript:RetVal('<%=objNam%>','<%=Rs("ValidityTyp").Value %>');" class="style2"><%=Rs("ValidityTyp").Value%></TD>                                          

                                   <TD width="75%" bgcolor="#FFFFFF"><a href="javascript:RetVal('<%=objNam%>','<%=Rs("ValidityTyp").Value %>');" class="style2"><%=Rs("ValidityDesc").Value%></a></TD>

                           </TR>

                <%

                                Rs.MoveNext

                        loop

                End If

                Rs.Close

                set Rs=nothing

                %>

  </Table>

</Center>

 

</BODY>

</HTML>

 

每个asp页面只要检测输入框的有效性的,都include进来(<script language="javascript" src="../JS/jsPublic.js"></script>),并且查询的图标都调用,就可以实现写一套程式,整个系统共用!

 4.检测合法值

如果是用户用我们查询出来的输入值,那么肯定是合法的,不用检测,但是如果是自己输入,那就要检测!2种作业方式的值都需要秀出字段值的描述,例如MIS000,代表的是资讯部,我们写入表示MIS000,但是要秀给用户,代表的是资讯部,同时用户也要做修改,所以字段值输入框要有,旁边给出一个秀出字段描述(来自FIELDVALIDITYDETAILValidityDesc)!用户自己输入的就写个onblur事件getFDESC()即可!

 <input name="txtDALaws" type="text" οnblur="getFDESC('txtDALaws','TestingOrdinance','txtDALawsDesc');" size="10" <%if DHApplyNo <> "" then%>value="<%=RcSet("DALaws")%>"<%end if%>>

          <input name="txtDALawsDesc" type="text" class="readonly" readonly="true" size="10" <%if DHApplyNo <> "" then%> value="<%=getFDESC("TestingOrdinance",RcSet("DALaws"))%>" <%end if%>>

 

getFDESC()的代码:(也是放在jsPublic里面,任何页面可以调用)

 

function getFDESC(objNam,objTyp,objDesc){  //objNam:對象名稱;objTyp:對象值類型;objDesc:寫入描述名稱

        var objVal;

        objVal = document.all(objNam).value;

                if (objVal != ''){ //有輸入值才判斷

                                var URL = 'getFieldValid.asp?objTyp=' + objTyp + '&objVal=' + objVal;

                                var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                                xmlHttp.open("POST",URL,false);

                                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset:big5")

                                xmlHttp.send();

                                var returnValue = xmlHttp.responseText;

                                if(returnValue =='N'){

                                  document.all(objNam).focus();

                                  alert('請輸入正確的' + objTyp);

                                }

                                else{

                                        document.all(objDesc).value=returnValue;

                                }     

                }

}

 

实际查询资料库的字段输入值是否合法的xmlHttp调用的程式getFieldValid.asp

<%Option Explicit%>

<!-- #include virtual="/include/adovbs.inc" -->

<!-- #include virtual="/include/DataBase.fun" -->

<!-- #include virtual="/include/Pub_Function.fun" -->

<!-- #include file="../include/Impact_TS_InfoChk.fun" -->

<%

dim olecodepage

dim DBConn,RcSet,Sql

dim cn

dim AD

dim objTyp,objVal

 

objTyp = trim(request.QueryString("objTyp"))

objVal = trim(request.QueryString("objVal"))

olecodepage = session.CodePage

session.CodePage = 65001

Set DBConn = Application("DBConn")

Set RcSet = Server.CreateObject("ADODB.Recordset")

        Sql = "select D.ValidityDesc from FIELDVALIDITY H inner join FIELDVALIDITYDETAIL D on H.ValidityID = D.ValidityID " &_

        "where H.ValidityID = '"& objTyp &"' and ValidityTyp = '"& objVal &"'"

        RcSet.Open Sql,DBConn

        if not RcSet.eof then

                Response.write RcSet("ValidityDesc")

        else

        Response.write "N"

    end if

RcSet.close

set RcSet = nothing

session.CodePage =  olecodepage

%>

 

至此,这个查询帮助,检测有效性,秀出描述的流程已经写完,这样整个系统的可以归类的输入框的值就可以简单修改传入的值来检测用户输入的输入框的。至于要不要输入,这个要放在递交触发事件里面!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值