3.4 JQuery综合实例
3.4.1 需求描述
创建HTML页面,实现员工信息的录入功能。员工信息包括姓名、性别、身份证号码、基本工资和工作经历信息(时间段、公司名称、职务、主要工作及职责、证明人),具体要求如下:
(1)时间段应引用JQuery日期插件。
(2)可以实现同时录入多条工作经历信息的功能。
(3)可以对工作经历信息进行移除。
3.4.2 分析与实现
整个页面分为2块区域,即员工基本信息录入区域和工作经历录入区域。员工基本信息录入区域主要用于放置员工基本信息的录入控件,即放置姓名、性别、身份证和基本工资等信息的录入控件;工作经历录入区域则用于放置工作经历的相关信息录入控件,即放置时间段、公司名称、职务、主要工作及职责、证明人等信息的录入控制。界面的布局设置如图3-6所示。
图3-6 界面的布局设置
小贴士
图中的“+”可以动态地添加行,为增加新的工作经历信息的添加控件;图中的“×”可以删除所在的行,但不能删除第1行。
实现步骤如下:
(1)新建一个名为“JQuery综合实例”的HTML页面。
(2)从解决方案的Scripts文件夹中将JQuery类库添加到页面的<head></head>之间,VisualStudio2013生成的代码如下:
<script src="Scripts/jquery-1.10.2.min.js"></script>
(3)添加学生基本信息录入控件的样式表如下:
<style type="text/css"> input{ /*设置input标签的样式*/ border: 1px solid black; /*将边框的宽度设置为1px,黑色、实线*/ } .title { /*员工基本信息标准样式*/ width: 80px; } .rowInfo { margin-bottom: 5px; clear: both; /*清除前面控件的左漂浮效果*/ } </style>
(4)添加学生基本信息录入控件。
<div class="rowInfo"> <div class="title"><span>姓名:</span></div><div><input id="name "name="name" /></div> <div class="title"><span>性别:</span></div><div><input type="radio" checked="checked" name="gender">男</input> <input type="radio" name="gender">女</input></div> </div> <div class="rowInfo"> <div class="title"><span>身份证:</span></div><div><input id="id" name="id" /></div> <div class="title"><span>基本工资:</span></div><div><input id="salary" name="salary" /></div> </div>
(5)程序的运行界面如图3-7所示。
图3-7 程序的运行界面
(6)添加工作经历录入控件样式。
a { /*设置超链接的样式*/ text-decoration:none; /*去掉下划线*/ } .tbl { border-top: 1px solid black; /*将上边框的宽度设置为1px,黑色、实线*/ border-left: 1px solid black; /*将左边框的宽度设置为1px,黑色、实线*/ clear: both; /*清除其他控件的漂浮效果*/ margin-top: 50px; /*设置下边界为50像素*/ } .tbl td { /*设置工作经历表中单元格的样式*/ border-right: 1px solid black; border-bottom: 1px solid black; text-align:center; /*内容居中*/ height:25px; } .date { /*日期录入框的样式*/ width:59px; }
(7)根据需求,用户可以录入多条工作经历,类似的多信息录入采用table标签进行布局,可以大大地简化实现的难度,HTML代码如下所示。
<table border="0" id="tblWorkExperience" class="tbl" cellpadding="0" cellspacing="0"> <thead><tr><td colspan="6">工作经历</td></tr></thead> <tr> <td width="160px">时间段</td><td width="130px">公司名称</td> <td width="100px">职务</td><td width="200px">主要工作及职责</td> <td width="100px">证明人</td> <td width="70px">操作(<a href="#"onclick="addRow()">+</a>)</td></tr> <tr id="r_1"> <td>从<input id="txtFromDate_1"onclick="WdatePicker()"class="date"/> 到<input id="txtToDate_1" class="date" onclick="WdatePicker()" /> </td> <td><input id="txtCompanyName_1" /></td> <td><input id="txtPostion_1" /></td> <td><input id="txtResponsibility_1" /></td> <td><input id="txtWitness_1"></td> <td><a href="#"onclick="return false; "style="color:gray; "title= "删除">×</a></td> </tr> </table>
小贴士
上述代码应写在<body></body>标签内、最后一个</div>标签之后。
代码中的"_1"作为行序号的标识,代表第1行;代码块“onclick="WdatePicker()"”将为控件注入日期选择功能。
(8)运行界面如图3-8所示。
图3-8 添加工作经历后程序的运行界面
(9)当用户单击图3-9中的“+”时,页面将自动在工作经历列表中增加一行工作经历录入控件,使用JQuery的append方法可向<table></table>标签中增加行,代码如下:
<script type="text/javascript"> var rowCounter =1; //工作经历表的行计数器,用于标识行序列号,并作为ID的组成部分,其值只增不减 function addRow(){ rowCounter++; //行号加1 $("#tblWorkExperience").append('<tr id="r_' +rowCounter +'"><td>从<input onclick="WdatePicker()" id="txtFromDate_' +rowCounter+'"class="date"/>到<input onclick="WdatePicker()" id="txtToDate_' +rowCounter +'" class="date" /></td><td><input id="txtCompanyName_' +rowCounter+'"/></td><td><input id="txtPostion_' +rowCounter +'"/></td><td><input id="txtResponsibility_' +rowCounter +'"/></td><td><input id="txtWitness_' +rowCounter +'"></td><td><a href="#" onclick="removeRow(' +rowCounter +')" title="删除">×</a></td></tr>'); } </script>
(10)上述代码已实现添加工作经历行的功能,当然也可以移除行中的控件,在addRow方法后添加removeRow方法,使其具备根据行标识移除行标签的功能,代码如下:
//根据行序号移除工作经历表中的行 function removeRow(rowIndex) { if (confirm("真的打算移除吗?")) { $("#r_" +rowIndex).remove(); } }
(11)添加日期控件。基于B/S的日期控件需要自定义控件,JQuery联盟提供了大量开源、免费的日期控件,可以从http://jqueryui.com/下载得到。本书采用的是My97DatePicker日期控件,可以从http://www.my97.net/下载。
(12)将下载的整个DatePicker包复制到Scripts文件夹中,再在“JQuery综合实例. html”文件的JQuery引用后添加对其文件的引用,代码如下:
<script src="Scripts/My97DatePicker/WdatePicker.js"></script>
(13)程序的运行界面如图3-9所示。
图3-9 添加日期后程序的运行界面