// 该jquery扩展引自 http://www.ghostsf.com/tools/389.html 方法名是作者博客的命名
$.fn.ghostsf_serialize = function () {
  var a = this.serializeArray();
  var $radio = $('input[type=radio],input[type=checkbox]', this);
  var temp = {};
  $.each($radio, function () {
  if (!temp.hasOwnProperty(this.name)) {
    if ($("input[name='" + this.name + "']:checked").length == 0) {
    temp[this.name] = "";
    a.push({name: this.name, value: ""});
    }
  }
});
return jQuery.param(a);
};

// 粗制滥作的 表单判空
function verify2(valbtnId,valformId) {

  $(valbtnId).attr('disabled',true);
  var reg = /^\s*$/g;
  $(valformId).keyup('change',function valkeyup(){

  //var formdataarray = $(valformId).serialize().split('&'); 未获取到未选中的 checkbox radio

  //使用扩展后 ghostsf_serialize() 方法可以获取
  var formdataarrayall = $(valformId).ghostsf_serialize().split('&');
  var countf = 0;

  for(var i = 0; i < formdataarrayall.length; i++) {

    var labeltype = formdataarrayall[i].substring(0,formdataarrayall[i].indexOf('='));

    if ($('*[name='+labeltype+']').is('select')) {
    //如果是下拉框 触发键盘事件 ?
      if($('select[name='+labeltype+']').children('options:selected')){
        if (!reg.test($('select[name='+labeltype+']:selected').val())) {
        countf++;
        }
      }
    }

    if ($('*[name='+labeltype+']').is('input')) {
      if($('*[name='+labeltype+']').attr('type') == 'text'){
        if (!reg.test($('input[name='+labeltype+']').val())) {
        countf++;
        }
      }
      if ($('*[name='+labeltype+']').attr('type') == 'checkbox') {
        if ( !reg.test($('input[name='+labeltype+']:checked').val()) && $('input[name='+labeltype+']:checked').val()!= undefined) {
        countf++;
        }
      }
      if ($('*[name='+labeltype+']').attr('type') == 'radio') {
        if (!reg.test($('input[name='+labeltype+']:checked').val()) && $('input[name='+labeltype+']:checked').val()!= undefined) {
        countf++;
        }
      }
    }

  }
  valreturn(countf == i ? false : true,valbtnId);
});

$(valformId).change('click',function valchange(){
    var formdataarrayall = $(valformId).ghostsf_serialize().split('&');
    var countf = 0;
  for(var i = 0; i < formdataarrayall.length; i++) {

    var labeltype = formdataarrayall[i].substring(0,formdataarrayall[i].indexOf('='));

    if ($('*[name='+labeltype+']').is('select')) {

      if($('select[name='+labeltype+']').children('options:selected')){
        if (!reg.test($('select[name='+labeltype+']').val())) {
        countf++;
        }
      }
    }

    if ($('*[name='+labeltype+']').is('input')) {
        //alert($('*[name='+labeltype+']').prop('type'));
        if($('*[name='+labeltype+']').attr('type') == 'text'){
          if (!reg.test($('input[name='+labeltype+']').val())) {
          countf++;
          }
        }
      if ($('*[name='+labeltype+']').attr('type') == 'checkbox') {
        if ( !reg.test($('input[name='+labeltype+']:checked').val()) && $('input[name='+labeltype+']:checked').val()!=undefined) {
        countf++;
        }
      }
      if ($('*[name='+labeltype+']').attr('type') == 'radio') {
        if (!reg.test($('input[name='+labeltype+']:checked').val()) && $('input[name='+labeltype+']:checked').val()!=undefined) {
        countf++;
        }
      }
    }
  }
  valreturn(countf == i ? false : true,valbtnId);
});

}

function valreturn(val,valbtnId){
    $(valbtnId).attr('disabled',val);
    return val;
}

jquery的表单验证方法,一个function能不能同时捕捉点击事件和按键事件?能不能再优化下,有代码。的更多相关文章

  1. jquery实现表单验证简单实例

    /* 描述:基于jquery的表单验证插件. */ (function ($) { $.fn.checkForm = function (options) { var root = this; //将 ...

  2. ASP.NET MVC Jquery Validate 表单验证的多种方式

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  3. [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  4. Jquery Validate 表单验证的多种方式

    ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...

  5. 【锋利的jQuery】表单验证插件踩坑

    和前几篇博文提到的一样,由于版本原因,[锋利的jQuery]表单验证插件部分又出现照着敲不出效果的情况. 书中的使用方法: 1. 引入jquery源文件, 2. 引入表单验证插件js文件, 3. 在f ...

  6. jQuery formValidator表单验证插件

    什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...

  7. jQuery的表单验证

    jQuery的表单验证 直接上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  8. Jquery 实现表单验证,所有验证通过方可提交

    1. [代码]Jquery 实现表单验证,所有验证通过方可提交 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  9. jQuery Validate 表单验证插件----自定义一个验证方法

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

随机推荐

  1. 【python】if __name__ == '__main__'

    转载自:http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html 当你打开一个.py文件时,经常会在代码的最下面看到if __na ...

  2. Python+Selenium 自动化实现实例-定位一组对象(checkbox,inputs)

    # -*- coding: utf-8 -*- from selenium import webdriver import time import os dr = webdriver.Chrome() ...

  3. 【剑指offer】面试题 64. 求 1+2+3+...+n

    面试题 64. 求 1+2+3+...+n 题目:求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 1.采 ...

  4. CSS3盒模型——box-sizing

    box-sizing盒模型是CSS3的一个重要属性之一,常常被很多人给忽略了!CSS3出现之前box-sizing盒模型默认的宽高是指内容的宽高,css3之后可以用box-sizing来指定宽高. 目 ...

  5. vim的保存文件和退出命令

    文章来源:http://blog.sina.com.cn/s/blog_5e357d2d0100zmth.html 命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把 ...

  6. Thinkphp模板中函数的使用

    1.在模板中使用php函数 在thinkphp的html中,我们经常会遇到一些变量难以直接从php控制端直接处理,这些变量只有在模板中循环输出的时候处理比较合适,这个时候,我们就要在模板中使用函数 1 ...

  7. 31、Flask实战第31天:cms后台修改密码

    cms后台修改密码界面布局 先创建cms_resetpwd.html页面,继承cms_base.html {% extends 'cms/cms_base.html' %} {% block titl ...

  8. 【js学习】js连接RabbitMQ达到实时消息推送

    js连接RabbitMQ达到实时消息推送 最近在自己捯饬一个网站,有一个功能是需要后端处理完数据把数据发布到MQ中,前端再从MQ中接收数据.但是前端连接MQ又成了一个问题,在网上搜了下资料,点进去一篇 ...

  9. 【go】继续go go go,ubuntu环境搭建及golang的依赖关系分析

    这次是在ubuntu14.04 amd64上搭建go的编译环境,使用的IDE换成了sublime text,具体步骤参照的是 http://blog.csdn.net/aqiang912/articl ...

  10. Grunt Gulp Browserify Webpack

    Grunt 是相比后面几个更早的项目,他依赖于各种插件的配置.这是一个很好的解决方案,但是请相信我,你不会想看到一个 300 行的 Gruntfile Gulp 提供了一个不一样的解决方案,而不是依赖 ...