질문 1:
<script src="../js/jquery.js"></script> <script src="../js/jquery.validate.js"></script> <script> $().ready(function() { $("#registerForm").validate(); }); </script> <form id="registerForm" method="get" action=""> <fieldset> <p> <label for="cusername">用户名</label> <input id="cusername" name="username" type="text" data-rule-required="true" data-rule-rangelength="[2,10]" data-msg-required="用户名不能为空" data-msg-rangelength="用户名长度必须是2到10个字符"> </p> <p> <label for="cpassword">密码</label> <input id="cpassword" name="password" type="password" data-rule-required="true" data-rule-minlength="6" data-msg-required="密码不能为空" data-msg-minlength="至少设置6位密码"> </p> <p> <label for="cconfirmpassword">确认密码</label> <input id="cconfirmpassword" name="confirmpassword" type="password" data-rule-equalTo="#cpassword" data-msg-equalTo="两次密码不一致"> </p> <p> <label for="cemail">邮箱</label> <input id="cemail" name="email" data-rule-required="true" data-rule-email="true" data-msg-required="邮箱不能为空" data-msg-email="邮箱的格式不正确"> </input> </p> <p> <label for="chasreferee">有推荐人请勾选</label> <input type="checkbox" id="chasreferee" name="hasreferee"> </p> <p> <label for="creferee">推荐人</label> <input id="creferee" name="referee" data-rule-required="#chasreferee:checked" data-msg-required="推荐人不能为空"> </input> </p> <p> <input type="submit" value="提交"> </p> </fieldset> </form>
이전 다른 분들이 쓴 글을 읽어보니 jquery.metadata.js 라이브러리에 의존해서 class="required email" 형식으로 작성하는 것 같더라고요. 클래스 자체는 프리젠테이션 스타일에 다양한 검증 규칙이 첨부되어 있어 다소 지저분해 보이지만, 다행히 새 버전에서는 위의 js 라이브러리에 의존하지 않고 데이터를 사용하는 새로운 작성 방식이 있습니다. 규칙 확인 규칙, 데이터 메시지 프롬프트 정보의 형식이 재정의되어 더 간단하고 직관적이며 강력해졌습니다. 위 테스트를 통과했습니다
내 버전의 jquery.validate1.13.js
이러한 작성 방법을 사용하면 컨트롤의 메시지가 적용되지 않으며 오류가 보고됩니다. 정의되지 않은 'call' 속성을 읽을 수 없습니다. 정원의 많은 jquery.validate 기사에서 사용할 수 있다고 언급했습니다. 버전이 오래된 것 같습니다. 어쨌든 테스트해 볼 수 없습니다. 그리고 검증클래스를 제거할 때도 술에 취해 있었습니다. 아래 테스트 오류입니다!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="jquery.min.js"></script> <!--<script type="text/javascript" src="jquery.validate.js"></script>--> <script type="text/javascript" src="jquery.validate1.13.js"></script> <script type="text/javascript" src="jquery.validate.message_cn.js"></script> <script type="text/javascript" src="jquery.metadata.js"></script> <script type="text/javascript"> $(function(){ $.metadata.setType("attr", "validate"); $("#signupForm").validate(); //$("#signupForm").validate({ meta: "validate" }); //$("#commentForm").validate(); }) </script> </head> <body> <form id="signupForm" method="get" action=""> <p> <input id="email" name="email" validate="{required:true, email:true, messages:{required:'输入email地址', email:'你输入的不是有效的邮件地址'}}" /> </p> <p> <input class="submit" type="submit" value="Submit"/> </p> </form> </body> </html>
문제 2: jQuery_validate를 어떻게 구성하더라도 프롬프트 메시지를 볼 수 없습니다.
원인: submit()이 두 번 실행되었습니다.
예:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>jquery test</title> <script src="js/jquery.js"></script> <script src="js/jquery.validate.js"></script> <script src="js/jquery.metadata.js"></script> <script src="js/messages_zh.js"></script> <script> $(document).ready(function() { $("#commentForm").validate({ //debug:true }); }); </script> <script type="text/javascript"> function register(){ document.forms[0].action = 'register/addUser.action'; //document.forms[0].submit(); } </script> </head> <body > <form id="commentForm" method="post"> <table style ="width:100%"> <tr> <td>user name:</td> <td><input type="text" name="username" id="username" maxlength="10" class="{required:true,minlength:6,maxlength:12}" /></td> </tr> <tr> <td>password:</td> <td><input type="password" name="password" id="password" maxlength="15" class="required"/></td> </tr> <tr> <td></td> <td><input type="submit" value="Register" onclick="register();"></td> </tr> </table> </form> </body> </html>
jQuery 검증 후 제출이 있었습니다. [document.forms[0].submit();]을 주석 처리한 후 문제가 해결되었습니다.