1. 所有东西都写在html里,无疑是自己给自己挖个深坑,不仅丑还难维护,所以你赶紧用js重写一遍

    
    <!--fields里的属性对应input的name,如果你有多个input的name都是test1,那么他们共用这个校验规则-->
    <!--rule可以是String、Array和Function-->
    <!--rule为String时,只能填校验规则名,例如number/email,不能填required和failCss等,因为他们是特性,只能作为test1的属性-->
    <!--rule为Array时,数组的第一项是正则表达式,第二项是失败消息-->
    <!--rule为Function时,函数返回true或失败消息,function(val){return true || 'fail message'}-->
    <!--failCss/failHtml接收多个参数时以数组的形式赋值,只接收一个参数时可以是字符串-->
    <!--failStyle可以赋值Object字面量或者JSON格式的字符串-->
    <input type="text" name="test1">
    <script>
        new SMValidator('form', {
            fields: {
                test1: {
                    rule: [/^[A-Z]*$/i, '请输入字母'],
                    required: '请输入内容',
                    failCss: 'error',
                    failStyle: {color:'#c3f', border:'1px solid #f00'},
                    passCss: 'success',
                    passStyle: {color: '#090'},
                    failHtml: ["<b style='color:#f00'></b>", "!<b style='color:#f00'>×</b>"],
                }
            }
        });
    </script>
                    
  2. 回到老板的需求上,四个表单一个校验数字,一个校验邮件,两个校验字母,用同样的样式,怎么复用代码才好呢?

    
    <!--特性可以移到fields的同级,表示所有表单共用,这时test2只需要配置校验规则-->
    <!--rules是自定义校验规则,可以是Array和Function-->
    <!--rules为Array时与上面提到的rule一样-->
    <!--rules为Function时可以带多个参数function(val, param1, ...){return true || 'fail message'}-->
    <!--test2除了Object外还可以赋值String、Array、Function-->
    <!--test2为String时可赋与html的data-rule一样值-->
    <!--test2为Array/Function时与Object类型里的rule一致-->
    <!--另外特性都可以赋值为false,例如,如果test2的值为Object,且Object的failCss属性为false,则test2在校验失败时也不使用失败样式-->
    <!--特性还可以使用SMValidator.config({...});来设置,表示所有SMValidator实例都使用这些特性-->
    <input type="text" name="test2">
    <input type="text" name="test3">
    <input type="text" name="test4">
    <input type="text" name="test4">
    <script>
        new SMValidator('form', {
            required: '请输入内容',
            failCss: 'error',
            failStyle: {color:'#c3f', border:'1px solid #f00'},
            passCss: 'success',
            passStyle: {color: '#090'},
            failHtml: ["<b style='color:#f00'></b>", "!<b style='color:#f00'>×</b>"],
            rules: {
                onlyLetter: [/^[A-Z]*$/i, '请输入字母']
            },
            fields: {
                test2: 'required|number',
                test3: 'required|email',
                test4: 'required|onlyLetter'
            }
        });
    </script>
                    

    数字:

    邮件:

    字母:

    字母:

  3. SMValidator目前全部特性有以下这些:
    required,disinput,disblur,focus,manul,failHtml,passHtml,failStyle,failCss,passStyle,passCss,async,short

    除了async和short,其他特性在教程1都介绍过。要注意的是required和async比较特别,他们是特性和规则的合体

    完成这些需求后,你想起老板不懂英文,但是内置规则的提示都是英文,怎么办好呢?老板已经往这边走了过来 教程3