Js检验form表单数据

使用js检验form表单内数据,适用于大多数,比较基本。

js代码

        //封装方法,只能在差不多的input标签里使用
        function check(input) {
            //获取元素对应的span标签
            var span = document.getElementById(input.id + "Span");
            if(input.value == "" || input.value == null){
                span.style.color = "red";
                span.innerHTML = "*" + input.name +"不能为空";

                //方便后面的检验
                return false;
            }else if((input.id == "desc" && input.value.length>=50) || (input.id!="desc" && input.value.length <= 10)){
                span.style.color = "green";
                span.innerHTML = input.name + "没毛病";

                return true;
            }else{
                if(input.id == "desc"){
                    span.style.color = "red";
                    span.innerHTML = input.name + "请再写多一点";

                    return false;
                }
                span.style.color = "red";
                span.innerHTML = input.name + "超出限制";

                return false;
            }
        }

        //复选框全选和取消全选
        function allCheckbox() {
            //获得checkbox列表
            var boxs = document.getElementsByName("fav");
            //获得按钮的对象
            var all = document.getElementById("all");
            if(all.checked){ //点击的时候变为true,所以让复选框先在true里执行
                for (var i = 0; i < boxs.length; i++) {
                    boxs[i].checked = true;
                }
                //让全选和其他复选框一起改变
                all.checked = true;
            }else {
                for(var j=0;j<boxs.length;j++){
                    boxs[j].checked=false;
                }
                all.checked = false;
            }
        }
        
        function agreeReg() {
            var reg = document.getElementById("reg");
            var reg2 = document.getElementsByName("reg");
            if(reg.checked){
                reg2[0].disabled = !reg2[0].disabled;
            }else{
                reg2[0].disabled = !reg2[0].disabled;
            }
        }

        function resultCheck(btn) {
            //检验每个input标签是否都被检验完成
            if(check(document.getElementById("uname")) || check(document.getElementById("pwd")) || check(document.getElementById("desc"))){
            }else{
                alert("请认真填写信息");
            }
        }

Html代码

<form action="#" method="get">
    用户名:<input type="text" id="uname" name="用户名" onblur="check(this)" placeholder="*用户名不能大于10位"><span id="unameSpan"></span><br><br>
    密码:<input type="password" id="pwd" name="密码" onblur="check(this)" placeholder="*用户名不能大于10位"><span id="pwdSpan"></span><br><br>
    性别:<input type="radio" name="sex" value="1" checked="checked">男<input type="radio" name="sex" value="0">女<br><br>
    爱好:<input type="checkbox" name="fav" value="1">LOL<input type="checkbox" name="fav" value="2">吃饭<input type="checkbox" name="fav" value="3">睡觉<input type="checkbox" name="fav" value="4">听歌<br>
    <input type="checkbox" name="fav" value="5">跑步<input type="checkbox" name="fav" value="6">宅在家里<input type="checkbox" name="fav" value="7">看电影<input type="checkbox" name="fav" value="8">交朋友
    &nbsp;&nbsp;<input type="checkbox" id="all" onclick="allCheckbox()">全选<br><br>
    自我介绍:<br><textarea name="自我介绍" style="resize: none;" id="desc" cols="45" rows="10" onblur="check(this)"></textarea><br><span id="descSpan"></span><br><br>
    <input type="checkbox" id="reg" onclick="agreeReg()">是否同意注册 <br><br>
    <input type="submit" name="reg" disabled="disabled" value="注册" onclick="resultCheck(this)">
</form>
### 表单验证库的选择 对于Next.js和React应用程序而言,选择合适的表单验证库至关重要。以下是几个被广泛认可并使用的表单验证解决方案: #### Formik Formik 是一个用于处理表单的高级组件,它简化了创建复杂表单的过程,并提供了内置的支持来管理状态、校验以及提交逻辑。其API设计直观易懂,能够很好地集成到任何React或Next.js项目中[^1]。 ```javascript import { useFormik } from 'formik'; import * as Yup from 'yup'; const MyForm = () => { const formik = useFormik({ initialValues: { email: '', password: '' }, validationSchema: Yup.object({ email: Yup.string().email('Invalid email address').required('Email is required'), password: Yup.string().min(8, 'Password must be at least 8 characters').required('Password is required') }), onSubmit: values => { alert(JSON.stringify(values)); } }); return ( <form onSubmit={formik.handleSubmit}> {/* ... */} </form> ); }; ``` #### React Hook Form React Hook Form 提供了一种更轻量级的方法来进行表单操作与验证。相比于其他选项,它的核心理念在于减少不必要的渲染次数从而提高性能表现,在大型应用里尤为明显。此外,还支持Yup等第三方规则定义方式以便于实现复杂的业务需求[^2]。 ```typescript import { useForm } from "react-hook-form"; import * as yup from "yup"; type FormData = { username?: string; }; // Define schema with YUP const schema = yup.object().shape({ username: yup.string().required(), }); export default function App() { const methods = useForm<FormData>({ resolver: yupResolver(schema) }); // ... } ``` #### Final Form Final Form 可以说是最早一批专注于解决React生态下表单难题之一的开源框架;尽管如此,这并不妨碍其持续更新迭代保持竞争力。除了具备强大的插件体系外,也允许开发者灵活定制化各种行为模式满足特定场景下的要求[^3]。 ```jsx import { Form, Field } from 'final-form' <Form onSubmit={(values) => console.log(values)} render={({ handleSubmit }) => ( <form onSubmit={handleSubmit}> <Field name="username"> {({ input, meta }) => ( <> <input {...input} type="text" placeholder="Username"/> {meta.error && meta.touched && (<span>{meta.error}</span>)} </> )} </Field> {/* Submit button etc... */} </form> )} /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值