今日內容:分析需求,板塊管理(增刪改查,上下移動),寫全部論壇相關的JavaBean.javascript
帖子的分類:置頂、精華、普通。(熱門、推薦、鎖定、...)css
普通帖:...html
置頂帖:排到最前面。(公告帖)java
精華帖:不影響排序,只是一個標誌,能夠列出全部的精華帖。mysql
-------jquery
熱門帖:只是一個標誌。git
鎖定帖:不能回覆。ajax
...sql
主題列表的排序:數據庫
最新狀態的帖子排到最前面,置頂帖在最上面。
分頁
數據列表的分頁效果:
分頁面 + 過濾條件 + 排序條件
回帖列表的排序:
最新的回覆排到最下面(最後一頁)
分頁
前幾個回覆的稱呼:
1樓、2樓、3樓、...
樓主、沙發、板凳、地板、...
在頁面中的"在線編輯器"。
所見即所得。
版塊管理中的上下移動。
增刪改查:
Forum.java:
package cn.itcast.oa.domain; /** * 實體:論壇版塊 * @author Tan * */ public class Forum {
private Long id; private String name; private String description;
private int position; //位置信息,用於上移下移操做 … } |
ForumManageAction:
@Controller @Scope("prototype") public class ForumManageAction extends BaseAction<Forum>{ /** 列表 */ public String list() throws Exception { List<Forum> forumList = forumManagerService.findAll(); ActionContext.getContext().put("forumList", forumList); return "list"; }
/** 刪除 */ public String delete() throws Exception { forumManagerService.delete(model.getId()); return "toList"; }
/** 添加頁面 */ public String addUI() throws Exception { return "saveUI"; }
/** 添加 */ public String add() throws Exception { forumManagerService.save(model); return "toList"; }
/** 修改頁面 */ public String editUI() throws Exception { //準備數據 Forum forum = forumManagerService.getById(model.getId()); ActionContext.getContext().getValueStack().push(forum); return "saveUI"; }
/** 修改 */ public String edit() throws Exception { //從數據庫中取出要修改的對象 Forum forum = forumManagerService.getById(model.getId()); //設置要修改的屬性 forum.setName(model.getName()); forum.setDescription(model.getDescription()); //保存到數據庫 forumManagerService.update(forum); return "toList"; }
/** 上移 */ public String moveUp() throws Exception { forumManagerService.moveUp(model.getId()); return "tolist"; }
/** 下移 */ public String moveDown() throws Exception { forumManagerService.moveDown(model.getId()); return "tolist"; } } |
List.jsp:
<!-- 表頭--> <thead> <tr align="CENTER" valign="MIDDLE" id="TableTitle"> <td width="250px">版塊名稱</td> <td width="300px">版塊說明</td> <td>相關操做</td> </tr> </thead>
<!--顯示數據列表--> <tbody id="TableData" class="dataContainer" datakey="forumList"> <s:iterator value="forumList"> <tr class="TableDetail1 template"> <td>${name} </td> <td>${description} </td> <td><s:a action="forumManage_delete?id=%{id}" onClick="return delConfirm()">刪除</s:a> <s:a action="forumManage_editUI?id=%{id}">修改</s:a> <s:a action="forumManage_moveUp?id=%{id}">上移</s:a> <s:a action="forumManage_moveDown?id=%{id}">下移</s:a> </td> </tr> </s:iterator> </tbody> </table> <!-- 其餘功能超連接 --> <div id="TableTail"> <div id="TableTail_inside"> <s:a action="forumManage_addUI"> <img src="${pageContext.request.contextPath}/style/images/createNew.png" /> </s:a> </div> </div> </div> </body> </html> |
saveUI.jsp:
<!--顯示錶單內容--> <div id="MainArea"> <s:form action="forumManage_%{id == null ? 'add' : 'edit'}"> <s:hidden name="id"></s:hidden> <div class="ItemBlock_Title1"><!-- 信息說明<DIV CLASS="ItemBlock_Title1"> <IMG BORDER="0" WIDTH="4" HEIGHT="7" SRC="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 版塊信息 </DIV> --> </div>
<!-- 表單內容顯示 --> <div class="ItemBlockBorder"> <div class="ItemBlock"> <table cellpadding="0" cellspacing="0" class="mainForm"> <tr> <td width="100">版塊名稱</td> <td><s:textfield name="name" cssClass="InputStyle" /> *</td> </tr> <tr> <td>版塊說明</td> <td><s:textarea name="description" cssClass="TextareaStyle"></s:textarea></td> </tr> </table> </div> </div>
<!-- 表單操做 --> <div id="InputDetailBar"> <input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/> <a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a> </div> </s:form> </div> </body> </html>
|
Struts.xml:
<!-- 版塊管理 --> <action name="forumManage_*" class="forumManageAction" method="{1}"> <result name="list">/WEB-INF/jsp/forumManageAction/list.jsp</result> <result name="saveUI">/WEB-INF/jsp/forumManageAction/saveUI.jsp</result> <result name="toList" type="redirectAction">forumManage_list</result> </action> |
Tips:Struts.xml中name="forumManage_*"就得這麼寫,寫成forum或其餘的話會報錯!!
上移和下移:
1,position的值不能重複。
2,列表顯示時應按照positon的值排序(升序)。
3,上下移動就是與上面的或下面的Forum交換position的值。
思路:將position的值設置成和id值同樣,這樣數據庫中全部數據就都是按position以升序排列(這是數據庫的最初狀態,進行上下移操做後就不必定了).想要將A上移,就是將A的position值和比A的position值小的全部數據中最大的那個值的position交換,在查詢列表時,按position的某種順序排列便可.
如:
select * from itcast_forum where position_ = (
select max(position_) from itcast_forum where position_<9
);
或者這樣更好:
select * from itcast_forum where position_<9 order by position_ desc limit 0,1;
limit 0,1 意思是:從第一個數開始(第一個數下標爲0),取一個數據.
ForumManageServiceImpl:
@Service @Transactional @SuppressWarnings("all") public class ForumManagerServiceImpl extends DaoSupportImpl<Forum> implements ForumManagerService {
/** * 重寫findAll(),在查詢列表時,按position的值排序 */ public List<Forum> findAll() { return getSession().createQuery(// "from Forum f order by f.position")// .list(); }
/** * 重寫sava(),添加的同時設置position的值 */ public void save(Forum forum) { super.save(forum); // 設置position的值,能夠用id值來設置 forum.setPosition(forum.getId().intValue()); }
/** * 上移 */ public void moveUp(Long id) { // 獲取要交換位置號的對象 Forum forum = getById(id); Forum other = (Forum) getSession().createQuery(// "from Forum f where f.position < ? order by f.position desc")// .setParameter(0, forum.getPosition())// .setFirstResult(0)// .setMaxResults(1)// .uniqueResult();
// 最上面的不能上移 if (other == null) { return; }
// 設置position的值 int temp = forum.getPosition(); forum.setPosition(other.getPosition()); other.setPosition(temp);
// 更新到數據庫 getSession().update(forum); getSession().update(other); }
/** * 下移 */ public void moveDown(Long id) { // 獲取要交換位置號的對象 Forum forum = getById(id); Forum other = (Forum) getSession().createQuery(// "from Forum f where f.position > ? order by f.position asc")// .setParameter(0, forum.getPosition())// .setFirstResult(0)// .setMaxResults(1)// .uniqueResult();
// 最下面的不能下移 if (other == null) { return; }
// 設置position的值 int temp = forum.getPosition(); forum.setPosition(other.getPosition()); other.setPosition(temp);
// 更新到數據庫 getSession().update(forum); getSession().update(other); }
} |
Tips:重寫save()時,在保存以前id爲null,保存以後id就有值了.由於是持久化對象,全部就算是在保存以後再設置position值,它也能自動更新到數據庫(而不須要再保存一次).由於id是Long(封裝數據類型),而position是int(原始數據類型),因此要轉型:intValue().如果原始數據類型之間相互轉換,強轉便可.這些數據類型都是number的子類,number中有以下方法(查看方法:ctrl+shift+T找出Number類,再ctrl+O查看它因此的方法):
頁面效果:
List.jsp:
<div id="MainArea"> <table cellspacing="0" cellpadding="0" class="TableStyle">
<!-- 表頭--> <thead> <tr align="CENTER" valign="MIDDLE" id="TableTitle"> <td width="250px">版塊名稱</td> <td width="300px">版塊說明</td> <td>相關操做</td> </tr> </thead>
<!--顯示數據列表--> <tbody id="TableData" class="dataContainer" datakey="forumList"> <s:iterator value="forumList" status="status"> <tr class="TableDetail1 template"> <td>${name} </td> <td>${description} </td> <td><s:a action="forumManage_delete?id=%{id}" onClick="return delConfirm()">刪除</s:a> <s:a action="forumManage_editUI?id=%{id}">修改</s:a>
<!-- 最上面的不能上移 status是在map中的,因此要加#--> <s:if test="#status.first"> <span style="color: gray; cursor: pointer">上移</span> </s:if> <s:else> <s:a action="forumManage_moveUp?id=%{id}">上移</s:a> </s:else>
<!-- 最下面的不能下移 --> <s:if test="#status.last"> <span style="color: gray; cursor: pointer">下移</span> </s:if> <s:else> <s:a action="forumManage_moveDown?id=%{id}">下移</s:a> </s:else> </td> </tr> </s:iterator> </tbody> </table>
<!-- 其餘功能超連接 --> <div id="TableTail"> <div id="TableTail_inside"> <s:a action="forumManage_addUI"> <img src="${pageContext.request.contextPath}/style/images/createNew.png" /> </s:a> </div> </div> </div> |
需求頁面:
實體類圖:
Froum中的topicCount和articleCount是特殊字段,這麼設計是爲了額提升效率.Topic與User和Reply與User都是多對一關係,採用單向關聯,目的也是爲了提升效率.刪除某一回復,不會真的刪除,而是給它作個已刪除的標記.Topic,Reply與Article只是在JavaBean中存在繼承關係,在數據庫中沒有Article這張表.
Article.java:
/** * 實體:文章 * @author Tan * */ public abstract class Article {
private Long id; private String content; //內容(TEXT類型) private Date postTime; //發表時間 private String ipAddr; //ip地址
private User author; //做者 …… } |
Topic.java:
/** * 實體:主貼 * @author Tan * */ public class Topic extends Article{
/** 普通貼 */ public static final int TYPE_NORMAL = 0; /** 精品貼 */ public static final int TYPE_BEST = 1; /** 置頂貼 */ public static final int TYPE_TOP = 2;
private String title; //標題 private int type; //類型 private int replyCount; //回覆數量 private Date lastUpdate; //最後文章的發表時間
private Forum forum; //版塊 主貼與版塊:多對一 private Set<Reply> replies = new HashSet<Reply>(); //回覆 主貼與回覆:多對一 private Reply lastReply; //最後回覆 …… } |
Topic.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.itcast.oa.domain"> <class name="Topic" table="itcast_topic"> <id name="id"> <generator class="native"></generator> </id> <!-- 內容應是大文本類型,覺得在mysql中,大文本也有不少類型,因此要指定length屬性 --> <property name="content" column="content" type="text" length="60000"></property> <!-- 發表時間採用timestamp類型 --> <property name="postTime" column="postTime" type="timestamp"></property> <property name="ipAddr" column="ipAddr"></property> <property name="title" column="title"></property> <property name="type" column="type"></property> <property name="replyCount" column="replyCount"></property> <property name="lastUpdate" column="lastUpdate" type="timestamp"></property>
<!-- author屬性,表示我與User的多對一關係 --> <many-to-one name="author" class="User" column="authorId"></many-to-one>
<!-- forum屬性,表示我與Forum的多對一關係 --> <many-to-one name="forum" class="Forum" column="forumId"></many-to-one>
<!-- replies屬性,表示我與Reply的一對多關係 --> <set name="replies"> <key column="topicId"></key> <one-to-many class="Reply"/> </set>
<!-- lastReply屬性,表示我與Reply的一對一關係 採用基於外鍵的方式.本方有外鍵 --> <many-to-one name="lastReply" class="Reply" column="lastReplyId" unique="true"></many-to-one>
</class> </hibernate-mapping> |
Reply.java:
/** * 實體:回覆 * @author Tan * */ public class Reply extends Article{
private boolean deleted; //刪除標誌 private Topic topic; //主貼回覆與主貼:多對一 …… } |
Reply.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.itcast.oa.domain"> <class name="Reply" table="itcast_reply"> <id name="id"> <generator class="native"></generator> </id> <!-- 內容應是大文本類型,這是要指定length屬性 --> <property name="content" column="content" type="text" length="60000"></property> <!-- 發表時間採用timestamp類型 --> <property name="postTime" column="postTime" type="timestamp"></property> <property name="ipAddr" column="ipAddr"></property> <property name="deleted" column="deleted"></property>
<!-- author屬性,表示我與User的多對一關係 --> <many-to-one name="author" class="User" column="authorId"></many-to-one>
<!-- topic屬性,表示我與Topic的多對一關係 --> <many-to-one name="topic" class="Topic" column="topicId"></many-to-one> </class> </hibernate-mapping> |
Forum.java:
/** * 實體:論壇版塊 * @author Tan * */ public class Forum {
private Long id; private String name; private String description; private int topicCount; //主貼數量 private int articleCount; //文章數量:主貼數量+回覆數量
private int position; //位置信息,用於上移下移操做 private Set<Topic> topics = new HashSet<Topic>(); //主貼數 版塊與主貼:一對多 private Topic lastTopic; //最新主題 …… } |
Forum.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.itcast.oa.domain"> <class name="Forum" table="itcast_forum"> <id name="id"> <generator class="native"></generator> </id>
<property name="name" column="name"></property> <property name="description" column="description"></property> <property name="position" column="position_"></property> <property name="topicCount" column="topicCount"></property> <property name="articleCount" column="articleCount"></property>
<!-- topics屬性,表達的是我與Topic對象的一對多關係 --> <set name="topics"> <key column="forumId"></key> <one-to-many class="Topic"/> </set>
<!-- lastTopic屬性,表示我與Topic的一對一關係 採用基於外鍵的一對一映射.本方有外鍵 --> <many-to-one name="lastTopic" class="Topic" column="lastTopicId" unique="true"></many-to-one>
</class> </hibernate-mapping> |
說明:須要JQuery版本:1.2.6+
步驟:
1,導入的jQuery.js與jquery.validate.js等文件,注意順序不要顛倒!!
<script type="text/javascript" src="jquery.js">
<script type="text/javascript" src="jquery.metadata.js">
<script type="text/javascript" src="jquery.validate.js">
2, 指定哪一個(或哪些)表單要在提交前先進行驗證
<script type="text/javascript">
$(function(){
$("#testForm").validate();
});
</script>
3, 指定每一個字段的驗證規則
名稱 *<input type="text" name="loginName" class="required">
其中class="required" 表示本字段必需要填寫。
效果以下圖:
實際操做:
爲提升效率,可將前兩步的代碼抽取出來,寫到公共頁面中,接下來任何表單中的任何字段須要驗證的話,在相應字段的class(cssClass)中加入驗證規則便可.
Header.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="javascript" src="${pageContext.request.contextPath}/script/jquery.js"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/pageCommon.js" charset="utf-8"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/PageUtils.js" charset="utf-8"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/jquery_validate/jquery.metadata.js" charset="utf-8"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/jquery_validate/jquery.validate.js" charset="utf-8"></script> <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/pageCommon.css" />
<script type="text/javascript"> $(function(){ $("form").validate(); }); </script> |
若是想要對添加用戶的表單中的用戶名添加驗證:
<tr><td>登陸名</td> <td><s:textfield type="text" name="loginName" cssClass="InputStyle required {minlength:3,maxlength:10}"/> *(登陸名要惟一)</td> </tr> |
頁面效果:
1.1. 把驗證規則寫到字段元素的class屬性中
例:
用戶名:<input type="password" name="password" class="required">
電子郵件:<input type="text" name="email" class="required email">
密碼:<input type="password" name="password" id="password1"
class="{required: true, minlength: 3}">
再次輸入密碼:<input type="password" name="password2"
class="{equalTo:'[#password1]'} required">
以上用了兩種方式:
1, 指定多個class名稱(驗證規則),多個class名稱之間用空格隔開,如:class="required email"。
2, 使用JSON對象,指定多個屬性,如:class="{required: true, minlength: 3}"。能夠爲某驗證規則指定所用的參數,如minlength規則須要指定最小長度,這裏爲3。
3, 混合使用,如:class="{equalTo:'[#password1]'} required"。
說明:
1, 若是使用第2種方式(JSON對象),就必須引入:jquery.metadata.js,做用是解析JSON對象。
2, 若是表單字段的name不能重複,則只有最前面的配置起做用。
required:true |
必填字段 |
remote:"/checkName.do" |
使用ajax方式訪問"/checkName.do",經過返回true或false表示輸入值經過或未經過驗證 |
email:true |
必須輸入正確格式的電子郵件 |
url:true |
必須輸入正確格式的網址 |
date:true |
必須輸入正確格式的日期 |
dateISO:true |
必須輸入正確格式的日期(ISO),例如:2010-01-01,2010/01/01 只驗證格式,不驗證有效性 |
number:true |
必須輸入合法的數字(負數,小數) |
digits:true |
必須輸入整數 |
creditcard: |
必須輸入合法的信用卡號 |
equalTo:"expr" |
輸入值必須和$("expr").val()的值相同, |
accept: "gif|png|jpg" |
輸入擁有合法後綴名的字符串(上傳文件的後綴),多個後綴之間用'|'隔開 |
maxlength:5 |
輸入長度最可能是5的字符串(漢字算一個字符) |
minlength:3 |
輸入長度最小是3的字符串(漢字算一個字符) |
rangelength:[5,10] |
輸入長度必須介於 5 和 10 之間的字符串")(漢字算一個字符) |
range:[5,10] |
輸入值必須介於 5 和 10 之間 |
max:5 |
輸入值不能大於5 |
min:10 |
輸入值不能小於10 |
說明:
1, remote是遠程驗證。好比註冊驗證用戶名是否已被註冊,返回值只能是true(驗證成功)或false(驗證失敗)。在訪問指定的url時,會自動把當前字段的值作爲參數傳遞過去(以字段的name值爲key,value爲參數值)。
2, 例如使用remote驗證用戶名是否存在,當添加一個用戶後,在當前窗口中(同一個窗口),再次添加一個同名的用戶,validate不能提示該用戶已存在,這是由於緩存的緣由,jquery仍認爲該用戶名可用。解決方法是在頁面中添加以下代碼:
$().ready(function(){
$.ajaxSetup ({
cache: false //關閉ajax相應的緩存
});
});
3, 某些屬性值中的引號不能省略,不然出錯。如accept、equalTo等,由於這時他須要的是一個字符串。
jQuery.extend(jQuery.validator.messages, {
required: "請填寫本字段",
remote: "驗證失敗",
email: "請輸入正確的電子郵件",
url: "請輸入正確的網址",
date: "請輸入正確的日期",
dateISO: "請輸入正確的日期 (ISO).",
number: "請輸入正確的數字",
digits: "請輸入正確的整數",
creditcard: "請輸入正確的信用卡號",
equalTo: "請再次輸入相同的值",
accept: "請輸入指定的後綴名的字符串",
maxlength: jQuery.validator.format("容許的最大長度爲 {0} 個字符"),
minlength: jQuery.validator.format("容許的最小長度爲 {0} 個字符"),
rangelength: jQuery.validator.format("容許的長度爲{0}和{1}之間"),
range: jQuery.validator.format("請輸入介於 {0} 和 {1} 之間的值"),
max: jQuery.validator.format("請輸入一個最大爲 {0} 的值"),
min: jQuery.validator.format("請輸入一個最小爲 {0} 的值")
});
實際操做:
Header.jsp:
…… <script type="text/javascript"> $(function(){ jQuery.extend(jQuery.validator.messages, { required: "請填寫本字段", remote: "驗證失敗", email: "請輸入正確的電子郵件", url: "請輸入正確的網址", date: "請輸入正確的日期", dateISO: "請輸入正確的日期 (ISO).", number: "請輸入正確的數字", digits: "請輸入正確的整數", creditcard: "請輸入正確的信用卡號", equalTo: "請再次輸入相同的值", accept: "請輸入指定的後綴名的字符串", maxlength: jQuery.validator.format("容許的最大長度爲 {0} 個字符"), minlength: jQuery.validator.format("容許的最小長度爲 {0} 個字符"), rangelength: jQuery.validator.format("容許的長度爲{0}和{1}之間"), range: jQuery.validator.format("請輸入介於 {0} 和 {1} 之間的值"), max: jQuery.validator.format("請輸入一個最大爲 {0} 的值"), min: jQuery.validator.format("請輸入一個最小爲 {0} 的值") });
$("form").validate(); }); </script> |
方法一:在class中指定某驗證規則的錯誤消息
<input type="file" name="parResource"
class="{
required: true, accept: 'zip',
messages: {required: '請選擇文件', accept:'請選擇正確的文件'}
}"> (提示:使用時不能換行)
方法二:在調用validate()方法時指定某驗證規則的錯誤消息
$(function() {
$("#myForm").validate({
messages:{
username:{ required: "請填寫用戶名" },
email: { required: '請填寫email', email: "請填寫正確的email"}
}
});
});
實際操做:
用戶的saveUI.jsp:
<tr><td>登陸名</td> <td><s:textfield type="text" name="loginName" cssClass="InputStyle required {minlength:3, maxlength:10, messages:{required:'請填寫用戶名!!!'}}"/> *登陸名要惟一) </td> </tr> |
效果:
指定label.error的樣式就能夠了,以下:
<style type="text/css">
label.error{
margin-left: 10px;
color: red;
}
</style>
說明:label.error指class爲error的label元素,如:
<label for="username" class="error">
實際操做:
首先找到相應錯誤消息提示在代碼中的具體信息:(這是火狐瀏覽器)
由此可知,它在laber標籤中,class名字叫error.而後在herder.jsp中添加指定樣式:
Header.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="javascript" src="${pageContext.request.contextPath}/script/jquery.js"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/pageCommon.js" charset="utf-8"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/PageUtils.js" charset="utf-8"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/jquery_validate/jquery.metadata.js" charset="utf-8"></script> <script language="javascript" src="${pageContext.request.contextPath}/script/jquery_validate/jquery.validate.js" charset="utf-8"></script> <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/pageCommon.css" />
<script type="text/javascript"> $(function(){ jQuery.extend(jQuery.validator.messages, { required: "請填寫本字段", remote: "驗證失敗", email: "請輸入正確的電子郵件", url: "請輸入正確的網址", date: "請輸入正確的日期", dateISO: "請輸入正確的日期 (ISO).", number: "請輸入正確的數字", digits: "請輸入正確的整數", creditcard: "請輸入正確的信用卡號", equalTo: "請再次輸入相同的值", accept: "請輸入指定的後綴名的字符串", maxlength: jQuery.validator.format("容許的最大長度爲 {0} 個字符"), minlength: jQuery.validator.format("容許的最小長度爲 {0} 個字符"), rangelength: jQuery.validator.format("容許的長度爲{0}和{1}之間"), range: jQuery.validator.format("請輸入介於 {0} 和 {1} 之間的值"), max: jQuery.validator.format("請輸入一個最大爲 {0} 的值"), min: jQuery.validator.format("請輸入一個最小爲 {0} 的值") });
$("form").validate(); }); </script> <style type="text/css"> label.error{ font-weight: bold; } </style> |
頁面效果: (這裏效果爲加粗)