jsp中的javascript的$(document).ready( function() { $("#loginForm").validate()
转自:https://bbs.csdn.net/topics/392459787?list=71147533
下面是jsp页面中的JavaScript代码
$(document).ready(
function()
{
$("#loginForm").validate(
{
rules: {
validateCode: {remote: "${pageContext.request.contextPath}/servlet/validateCodeServlet"}
},
messages: {
username: {required: "请填写用户名."},
password: {required: "请填写密码."},
validateCode: {remote: "验证码不正确.", required: "请填写验证码."}
},
errorLabelContainer: "#messageBox",
errorPlacement: function(error, element)
{
error.appendTo($("#loginError").parent());
}
}
); // validate
} // function
);// ready
请问这个$("#loginForm").validate 的工作原理和过程是什么,它参数中的rules messages 等参数有啥用 ?非常感谢大家。
以下是validateCodeServlet.java的代码
/**
* Copyright © 2015-2020 <a href=" ">JeePlus</a> All rights reserved.
*/
package com.jeeplus.core.servlet; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random; import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.StringUtils; /**
* 生成随机验证码
* @author jeeplus
* @version 2017-7-27
*/
@SuppressWarnings("serial")
public class ValidateCodeServlet extends HttpServlet { public static final String VALIDATE_CODE = "validateCode"; private int w = ;
private int h = ; public ValidateCodeServlet() {
super();
} public void destroy() {
super.destroy();
} public static boolean validate(HttpServletRequest request, String validateCode){
String code = (String)request.getSession().getAttribute(VALIDATE_CODE);
return validateCode.toUpperCase().equals(code);
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String validateCode = request.getParameter(VALIDATE_CODE); // AJAX验证,成功返回true
if (StringUtils.isNotBlank(validateCode)){
response.getOutputStream().print(validate(request, validateCode)?"true":"false");
}else{
this.doPost(request, response);
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
createImage(request,response);
} private void createImage(HttpServletRequest request,
HttpServletResponse response) throws IOException { response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", );
response.setContentType("image/jpeg"); /*
* 得到参数高,宽,都为数字时,则使用设置高宽,否则使用默认值
*/
String width = request.getParameter("width");
String height = request.getParameter("height");
if (StringUtils.isNumeric(width) && StringUtils.isNumeric(height)) {
w = NumberUtils.toInt(width);
h = NumberUtils.toInt(height);
} BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics(); /*
* 生成背景
*/
createBackground(g); /*
* 生成字符
*/
String s = createCharacter(g);
request.getSession().setAttribute(VALIDATE_CODE, s); g.dispose();
OutputStream out = response.getOutputStream();
ImageIO.write(image, "JPEG", out);
out.close(); } private Color getRandColor(int fc,int bc) {
int f = fc;
int b = bc;
Random random=new Random();
if(f>) {
f=;
}
if(b>) {
b=;
}
return new Color(f+random.nextInt(b-f),f+random.nextInt(b-f),f+random.nextInt(b-f));
} private void createBackground(Graphics g) {
// 填充背景
g.setColor(getRandColor(,));
g.fillRect(, , w, h);
// 加入干扰线条
for (int i = ; i < ; i++) {
g.setColor(getRandColor(,));
Random random = new Random();
int x = random.nextInt(w);
int y = random.nextInt(h);
int x1 = random.nextInt(w);
int y1 = random.nextInt(h);
g.drawLine(x, y, x1, y1);
}
} private String createCharacter(Graphics g) {
char[] codeSeq = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J',
'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '', '', '', '', '', '', '', '' };
String[] fontTypes = {"Arial","Arial Black","AvantGarde Bk BT","Calibri"};
Random random = new Random();
StringBuilder s = new StringBuilder();
for (int i = ; i < ; i++) {
String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);//random.nextInt(10));
g.setColor(new Color( + random.nextInt(), + random.nextInt(), + random.nextInt()));
g.setFont(new Font(fontTypes[random.nextInt(fontTypes.length)],Font.BOLD,));
g.drawString(r, * i + , + random.nextInt());
// g.drawString(r, i*w/4, h-5);
s.append(r);
}
return s.toString();
} }
答案:
$("#loginForm").validate是validate插件提供的api,是前端做表单验证的;rules是每一项的验证规则; messages 则是验证不通过时的提示信息;remote是指远程验证,插件都有规定的,如果是远程验证,api接口必须返回规定格式的数据,一般是返回boolean值;
其实就是一个表单拦截功能,在表单数据提交之前先根据提供的规则进行校验,不通过就进行错误提示,通过后才允许提交;
追答:
非常感谢,还要请教一下:
messages: {
username: {required: "请填写用户名."},
password: {required: "请填写密码."},
validateCode: {remote: "验证码不正确.", required: "请填写验证码."}
},
这个错误提示,如果只是没填写密码,这3个提示都显示吗,如果都显示,那肯定不对呀。
追答rules里面的key对应messages里面的key,同时对应form表单里面name为key的选项或者输入框;有些验证插件的机制是遇到一个不通过就会停下,并提示当前的错误信息;有些插件的机制是全部验证完,把所有不通过的错误信息都提示出来;
jsp中的javascript的$(document).ready( function() { $("#loginForm").validate()的更多相关文章
- $(function(){})和$(document).ready(function(){})
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
- jquery中的$(document).ready(function() {});
当文档载入时执行function函数里的代码, 这部分代码主要声明,页面加载后 "监听事件" 的方法.例如: $(document).ready( $("a") ...
- JQuery $(function(){})和$(document).ready(function(){})
document.ready和onload的区别——JavaScript文档加载完成事件页面加载完成有两种事件一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)二是onload,指 ...
- [Javascript]jquery $(document).ready() 与window.onload的区别
引用:http://www.jb51.net/article/21628.htm Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload ...
- angular中实现jQuery的Document Ready
angular中不推荐混用JQuery的,原因呢问度娘. 其实这是一个比较蛋疼的问题,尤其是angular2.0,尽量不要在页面上写js,用ts写到模块里面去吧.. 汲取各位先人的智慧,还是列一下 w ...
- JQ中$(window).load和$(document).ready区别与执行顺序
JQ中的$(document).ready()大家应该用的非常多,等同于$(function(){}),基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).l ...
- [转载]$(document).ready(function(){});
转载自:http://www.cnblogs.com/king-sheng/archive/2012/01/06/2313980.html $(document).ready(function() 页 ...
- [转]JQ中$(window).load和$(document).ready区别与执行顺序
一.$(window).load().window.onload=function(){}和$(document).ready()方法的区别 1.$(window).load() 和window.on ...
- javascript jquery document.ready window.onload
网易 博客 下载LOFTER客户端 注册登录 加关注 凡图的编程之路 2012年7月从一个编程新手的点点滴滴 首页 日志 LOFTER 相册 博友 关于我 日志 关于我 Holy ...
随机推荐
- P1422 小玉家的电费(scanf,printf)
题目描述 夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了.小玉家今天收到了一份电费通知单.小玉看到上面写:据闽价电[2006]27号规定,月用电量在 150 千瓦时及以下部分按每千瓦时 ...
- npm 安装与部署
nodejs 安装 查看版本 官方网址 下载linux版,64位 wget https://npm.taobao.org/mirrors/node/v12.13.1/node-v12.13.1-lin ...
- Pr制作音乐相册
Pr制作音乐相册 设置蒙版效果
- 设置datagridview隔行变色
/// <summary> /// 设置datagridview隔行变色 /// </summary> /// <param name="e"> ...
- 双向链表的简单Java实现-sunziren
写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的“阅读更多”按钮,惹不起我躲得起. 在上次分享完单向链表的简单编 ...
- openlayers按坐标点播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Beego :布局页面
1:页面布局 一个html页面由:head部分,body部分,内部css,内部js,外联css,外联的js这几部分组成.因此,一个布局文件也就需要针对这些进行拆分. 2> 新建一个lay ...
- 中间件c10k问题
中间件c10k问题 没有使用iocp/epoll/kqueue通讯的中间件,中间件就算部署在拥有多核CPU的强大服务器上,最头痛的问题是C10K问题. 中间件没有办法通过优化程序,提升CPU利用率来处 ...
- python3练习100题——050
题目:输出一个随机数. 程序分析:使用 random 模块. import random print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 pri ...
- POJ2226(二分图建图/最小点覆盖)
题意: 给定m*n的棋盘,有若干只咕咕.希望去掉一部分咕咕使得剩下的咕咕在上下左右四个方向越过咕咕槽的情况下都看不到咕咕. 思路: 建立一个二分图的方法有很多,这里采用xy二分. 假设没有咕咕槽的情况 ...