必要的工具函数:
  var _$ = function(n, w) {
    return typeof n == "string" ? (w || window).document.getElementById(n) : n;
  };  var _ergodicElement = function(n, f, w) {
    var e = _$(n, w);
    if(e.nodeType == 1 && !e.getAttribute("noergodic")) {
      f(e);
    }
    for(var n = e.firstChild; n; n = n.nextSibling) {
      _ergodicElement(n, f, w);
    }
  };  var _attachEvent = function(n, e, w) {
    if(document.addEventListener) {
      for(var i in e) {
        _$(n, w).addEventListener(i, e[i], false);
      }
    } else if(document.attachEvent) {
      for(var i in e) {
        _$(n, w).attachEvent("on" + i, e[i]);
      }
    }
  };  var _detachEvent = function(n, e, w) {
    if(document.removeEventListener) {
      for(var i in e) {
        _$(n, w).removeEventListener(i, e[i], false);
      }
    } else if(document.detachEvent) {
      for(var i in e) {
        _$(n, w).detachEvent("on" + i, e[i]);
      }
    }
  };  var _rewriteAccess = function(a, f) {
    if(a.constructor == String) {
      var d = {};
      var r = /(\w+?)(?:=)([^\s;]+)/g;
      while(r.exec(a)) {
        d[RegExp.$1] = f && f[RegExp.$1] ? f[RegExp.$1](decodeURIComponent(RegExp.$2)) : decodeURIComponent(RegExp.$2);
      }
      return d;
    }
    if(a.constructor == Object) {
      var d = "";
      for(var i in a) {
        d += i + "=" + encodeURIComponent(f && f[i] ? f[i](a[i]) : a[i]) + "; ";
      }
      return d;
    }
  };  var _rewriteObject = function(a, b) {
    for(var i in b) {
      if(!a[i]) {
        a[i] = b[i];
      }
    }
  };

解决方案 »

  1.   

    验证函数【上】:
      (function() {
        //函数盒子
        var _bin = function(form, request) {
          try {
            //定义验证队列
            var verifyArray = [];        //定义验证函数
            var verify = function(t) {
              if(/checkbox|radio/i.test(t.type)) {            //定义对比队列
                t = t.name ? document.getElementsByName(t.name) : {0 : t, length : 1};            //执行对比队列
                for(var i = 0; i < t.length; i++) {
                  if(t[i].checked) {
                    t[0].verifyStatus = "right";
                    break;
                  }
                  if(i == t.length - 1) {
                    t[0].verifyStatus = "empty";
                  }
                }            //执行描述函数
                return depict(t[0]);          } else {            //定义对比参数
                var v = t.value;
                var r = t.getAttribute("regexp");
                var e = t.getAttribute("equate");
                var m = t.getAttribute("method");            //清除对比参数
                t.removeAttribute("depictmethod");            //执行对比参数
                if(!v) {
                  t.getAttribute("nullable") ? t.verifyStatus = "blank" : t.verifyStatus = "empty";
                } else if(r && (v.search(r) < 0)) {
                  t.verifyStatus = "error";
                } else if(e && (v != _$(e).value)) {
                  t.verifyStatus = "error";
                } else if(m && (m = request[m](v, t))) {
                  t.verifyStatus = "error";
                  t.setAttribute("depictmethod", m);
                } else {
                  t.verifyStatus = "right";
                }            //执行描述函数
                return depict(t);          }
            };        //定义描述函数
            var depict = function(t) {          //定义描述参数
              var s = t.verifyStatus;
              var d = t.getAttribute("depictmethod") || _rewriteAccess(t.getAttribute("depict") || "")[s] || "";          //定义描述节点
              if(t.depictNode === undefined) {
                t.depictNode = null;
                if(t.getAttribute("for")) {
                  t.depictNode = _$(t.getAttribute("for"));
                } else {
                  _ergodicElement(t.parentNode, function(e) {
                    if(e.getAttribute("depictnode") && e.getAttribute("depictnode") == "depictnode") {
                      t.depictNode = e;
                      return;
                    }
                  });
                }
              }          //执行描述
              if(t.depictNode) {
                if(!t.depictNodeInner) {
                  t.depictNodeInner = t.depictNode.innerHTML;
                }
                t.depictNode.innerHTML = "<span class=\"" + s + "\">" + d + "<\/span>";
              } else if(/input|empty|error/i.test(s)) {
                return d;
              }        };        //定义提交函数
            var submit = function() {          //定义提交参数
              var m = [];
              var c = 0;          //执行对比队列
              for(var i = 0; i < verifyArray.length; i++) {
                if(/checkbox|radio/i.test(verifyArray[i].type) && verifyArray[i].name && document.getElementsByName(verifyArray[i].name)[0] != verifyArray[i]) {
                  continue;
                }
                if(d = verify(verifyArray[i])) {
                  m.push(d);
                }
                if(/input|empty|error/i.test(verifyArray[i].verifyStatus)) {
                  c++;
                }
              }          //执行提交校对
              if(request["submit"]) {
                if(d = request["submit"](verifyArray, c)) {
                  m.push(d);
                  c++;
                }
              }          //执行描述函数
              if(c) {
                alert("您提交的表单中有 " + c + " 处错误,请更正后再提交!" + (m.length ? "\n\n您可能需要确认以下内容:\n\n※ " + m.join("\n※ ") : ""));
              }          //返回对比结果
              return c;        };        //定义锁定函数
            var locked = function() {
              for(var i = 0; i < verifyArray.length; i++) {
                try {
                  verifyArray[i].setAttribute("readonly", "readonly", 0);
                } catch(error) {
                  continue;
                }
              }
            };        //定义行为函数
            var action = function() {
              var a = arguments[0].toLowerCase();
              var e = _$(arguments[1]);          switch(a) {            //覆载
                case "afresh" : {
                  _ergodicElement(form, function(e) {
                    action("append", e);
                  });
                  break;
                }            //撤消
                case "repeal" : {
                  _ergodicElement(form, function(e) {
                    action("remove", e);
                  });
                  break;
                }            //附加
                case "append" : {
                  if(!e.verifyReady) {
                    if(/text|testarea|password|hidden/i.test(e.type || e.tagName) && (e.getAttribute("regexp") || e.getAttribute("equate") || e.getAttribute("method"))) {                  //定义事件函数
                      if(!e.verifyFocus) {
                        e.verifyFocus = function() {
                          if(/blank|empty|undefined/i.test(e.verifyStatus)) {
                            e.verifyStatus = "input";
                          }
                          depict(e);
                        };
                        e.verifyBlur = function() {
                          verify(e);
                        };
                      }                  //注册事件函数
                      _attachEvent(e, {
                        "focus" : e.verifyFocus,
                        "blur"  : e.verifyBlur
                      });                  //注册验证对象
                      verifyArray.push(e);                  //设置验证标记
                      e.verifyReady = "complete";                } else if(/select/i.test(e.tagName) && (e.getAttribute("regexp") || e.getAttribute("equate") || e.getAttribute("method"))) {                  //定义事件函数
                      if(!e.verifyChange) {
                        e.verifyChange = function() {
                          verify(e);
                        };
                      }                  //注册事件函数
                      _attachEvent(e, {
                        "change" : e.verifyChange
                      });                  //注册验证对象
                      verifyArray.push(e);                  //设置验证标记
                      e.verifyReady = "complete";                } else if(/checkbox|radio/i.test(e.type) && !e.getAttribute("nullable")) {                  //定义事件函数
                      if(!e.verifyClick) {
                        e.verifyClick = function() {
                          verify(e);
                        };
                      }                  //注册事件函数
                      _attachEvent(e, {
                        "click" : e.verifyClick
                      });                  //注册验证对象
                      verifyArray.push(e);                  //设置验证标记
                      e.verifyReady = "complete";                } else if(e.getAttribute("request")) {                  //定义事件函数
                      if(!e.verifyClick) {
                        e.verifyClick = function() {
                          request[e.getAttribute("request")]();
                        };
                      }                  //注册事件函数
                      _attachEvent(e, {
                        "click" : e.verifyClick
                      });                  //设置验证标记
                      e.verifyReady = "complete";                }
                  }
                  break;
                }
      

  2.   

    验证函数【下】:
                //移除
                case "remove" : {
                  if(e.verifyReady) {
                    if(/text|testarea|password|hidden/i.test(e.type || e.tagName) && (e.getAttribute("regexp") || e.getAttribute("equate") || e.getAttribute("method"))) {                  //分离描述内容
                      if(e.depictNodeInner) {
                        e.depictNode.innerHTML = e.depictNodeInner;
                      }                  //分离事件函数
                      _detachEvent(e, {
                        "focus" : e.verifyFocus,
                        "blur"  : e.verifyBlur
                      });                  //分离验证对象
                      for(var i in verifyArray) {
                        if(verifyArray[i] == e) {
                          verifyArray.splice(i, 1);
                        }
                      }                  //删除验证标记
                      delete e.verifyReady;                } else if(/select/i.test(e.tagName) && (e.getAttribute("regexp") || e.getAttribute("equate") || e.getAttribute("method"))) {                  //分离描述内容
                      if(e.depictNodeInner) {
                        e.depictNode.innerHTML = e.depictNodeInner;
                      }                  //分离事件函数
                      _detachEvent(e, {
                        "change" : e.verifyChange
                      });                  //分离验证对象
                      for(var i in verifyArray) {
                        if(verifyArray[i] == e) {
                          verifyArray.splice(i, 1);
                        }
                      }                  //删除验证标记
                      delete e.verifyReady;                } else if(/checkbox|radio/i.test(e.type) && !e.getAttribute("nullable")) {                  //分离描述内容
                      if(e.depictNodeInner) {
                        e.depictNode.innerHTML = e.depictNodeInner;
                      }                  //分离事件函数
                      _detachEvent(e, {
                        "click" : e.verifyClick
                      });                  //分离验证对象
                      for(var i in verifyArray) {
                        if(verifyArray[i] == e) {
                          verifyArray.splice(i, 1);
                        }
                      }                  //删除验证标记
                      delete e.verifyReady;                } else if(e.getAttribute("request")) {                  //分离事件函数
                      _detachEvent(e, {
                        "click" : e.verifyClick
                      });                  //删除验证标记
                      delete e.verifyReady;                }
                  }
                  break;
                }          }
            };        //初始化表单
            form = _$(form);
            form.setAttribute("onsubmit", "return false", 0);        //初始化请求
            request = request || {};
            _rewriteObject(request, {
              "onsubmit" : function() {
                if(!submit() && !locked()) {
                  submit = null;
                  form.submit();
                }
              },
              "onreset" : function() {
                if(confirm("重置操作将清空信息,确认重置?")) {
                  form.reset();
                  for(var i = 0; i < verifyArray.length; i++) {
                    if(verifyArray[i].depictNode) {
                      verifyArray[i].depictNode.innerHTML = verifyArray[i].depictNodeInner;
                    }
                  }
                }
              },
              "onsaveas" : function() {
                if(!submit() && confirm("保存操作将更新信息,确认保存?") && !locked()) {
                  submit = null;
                  form.submit();
                }
              },
              "oncancel" : function() {
                throw new Error("Developing...");
              }
            });        //初始化行为
            action("afresh");        return function() {action(arguments[0], arguments[1])};
          } catch(error) {      }
        };    //添加全局引用
        verify = _bin;
      })();
    说明 + 演示地址:http://www.izhaoyang.com/temp/index.htm
      

  3.   

    更新了下,演示地址:http://www.zhanghong.name/example/verify/